@xyo-network/evm-call-witness 2.92.1 → 2.93.0

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.
@@ -1,7 +1,7 @@
1
1
  import { Promisable } from '@xylabs/promise';
2
2
  import { AbstractDiviner } from '@xyo-network/diviner-abstract';
3
3
  import { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model';
4
- import { Payload } from '@xyo-network/payload-model';
4
+ import { Payload, Schema } from '@xyo-network/payload-model';
5
5
  import { EvmCallDivinerLabels } from './Labels';
6
6
  import { EvmCallResult } from './Payload';
7
7
  export type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined];
@@ -22,7 +22,8 @@ export type EvmCallResults = Payload<{
22
22
  }>;
23
23
  }, EvmCallResultsSchema>;
24
24
  export declare class EvmCallDiviner<TParams extends EvmCallDivinerParams = EvmCallDivinerParams> extends AbstractDiviner<TParams> {
25
- static configSchemas: string[];
25
+ static configSchemas: Schema[];
26
+ static defaultConfigSchema: Schema;
26
27
  static labels: EvmCallDivinerLabels;
27
28
  protected static findCallResult<TResult = string>(address: string, functionName: string, payloads: EvmCallResult[]): TResult | undefined;
28
29
  protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../src/Diviner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AACzE,OAAO,EAAyB,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAE3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EAAoB,aAAa,EAAuB,MAAM,WAAW,CAAA;AAEhF,MAAM,MAAM,cAAc,CAAC,OAAO,GAAG,MAAM,EAAE,QAAQ,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;AAEvI,eAAO,MAAM,0BAA0B,wCAAwC,CAAA;AAC/E,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAA;AAE1E,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC;IAC/C,MAAM,EAAE,0BAA0B,CAAA;CACnC,CAAC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAA;AAEtE,eAAO,MAAM,oBAAoB,iCAAiC,CAAA;AAClE,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,OAAO,CAClC;IACE,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CACd,MAAM,EACN;QACE,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;QAChB,MAAM,EAAE,OAAO,CAAA;KAChB,CACF,CAAA;CACF,EACD,oBAAoB,CACrB,CAAA;AAED,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,eAAe,CAAC,OAAO,CAAC;IACvH,OAAgB,aAAa,WAA+B;IAC5D,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAuB;IAE1D,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,GAAG,SAAS;IAKxI,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS;IASzH,SAAS,CAAC,0BAA0B,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,cAAc;cAQzD,aAAa,CAAC,UAAU,GAAE,aAAa,EAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAyBnG,SAAS,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;CAkB7F"}
1
+ {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../src/Diviner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AACzE,OAAO,EAAyB,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAEnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EAAoB,aAAa,EAAuB,MAAM,WAAW,CAAA;AAEhF,MAAM,MAAM,cAAc,CAAC,OAAO,GAAG,MAAM,EAAE,QAAQ,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;AAEvI,eAAO,MAAM,0BAA0B,wCAAwC,CAAA;AAC/E,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAA;AAE1E,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC;IAC/C,MAAM,EAAE,0BAA0B,CAAA;CACnC,CAAC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAA;AAEtE,eAAO,MAAM,oBAAoB,iCAAiC,CAAA;AAClE,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,OAAO,CAClC;IACE,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CACd,MAAM,EACN;QACE,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;QAChB,MAAM,EAAE,OAAO,CAAA;KAChB,CACF,CAAA;CACF,EACD,oBAAoB,CACrB,CAAA;AAED,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,eAAe,CAAC,OAAO,CAAC;IACvH,OAAgB,aAAa,EAAE,MAAM,EAAE,CAAuD;IAC9F,OAAgB,mBAAmB,EAAE,MAAM,CAA6B;IACxE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAuB;IAE1D,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,GAAG,SAAS;IAKxI,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS;IASzH,SAAS,CAAC,0BAA0B,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,cAAc;cAQzD,aAAa,CAAC,UAAU,GAAE,aAAa,EAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAyBnG,SAAS,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;CAkB7F"}
@@ -1,7 +1,7 @@
1
1
  import { Promisable } from '@xylabs/promise';
2
2
  import { AbstractDiviner } from '@xyo-network/diviner-abstract';
3
3
  import { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model';
4
- import { Payload } from '@xyo-network/payload-model';
4
+ import { Payload, Schema } from '@xyo-network/payload-model';
5
5
  import { EvmCallDivinerLabels } from './Labels';
6
6
  import { EvmCallResult } from './Payload';
7
7
  export type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined];
@@ -22,7 +22,8 @@ export type EvmCallResults = Payload<{
22
22
  }>;
23
23
  }, EvmCallResultsSchema>;
24
24
  export declare class EvmCallDiviner<TParams extends EvmCallDivinerParams = EvmCallDivinerParams> extends AbstractDiviner<TParams> {
25
- static configSchemas: string[];
25
+ static configSchemas: Schema[];
26
+ static defaultConfigSchema: Schema;
26
27
  static labels: EvmCallDivinerLabels;
27
28
  protected static findCallResult<TResult = string>(address: string, functionName: string, payloads: EvmCallResult[]): TResult | undefined;
28
29
  protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../src/Diviner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AACzE,OAAO,EAAyB,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAE3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EAAoB,aAAa,EAAuB,MAAM,WAAW,CAAA;AAEhF,MAAM,MAAM,cAAc,CAAC,OAAO,GAAG,MAAM,EAAE,QAAQ,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;AAEvI,eAAO,MAAM,0BAA0B,wCAAwC,CAAA;AAC/E,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAA;AAE1E,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC;IAC/C,MAAM,EAAE,0BAA0B,CAAA;CACnC,CAAC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAA;AAEtE,eAAO,MAAM,oBAAoB,iCAAiC,CAAA;AAClE,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,OAAO,CAClC;IACE,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CACd,MAAM,EACN;QACE,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;QAChB,MAAM,EAAE,OAAO,CAAA;KAChB,CACF,CAAA;CACF,EACD,oBAAoB,CACrB,CAAA;AAED,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,eAAe,CAAC,OAAO,CAAC;IACvH,OAAgB,aAAa,WAA+B;IAC5D,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAuB;IAE1D,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,GAAG,SAAS;IAKxI,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS;IASzH,SAAS,CAAC,0BAA0B,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,cAAc;cAQzD,aAAa,CAAC,UAAU,GAAE,aAAa,EAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAyBnG,SAAS,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;CAkB7F"}
1
+ {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../src/Diviner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AACzE,OAAO,EAAyB,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAEnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EAAoB,aAAa,EAAuB,MAAM,WAAW,CAAA;AAEhF,MAAM,MAAM,cAAc,CAAC,OAAO,GAAG,MAAM,EAAE,QAAQ,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;AAEvI,eAAO,MAAM,0BAA0B,wCAAwC,CAAA;AAC/E,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAA;AAE1E,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC;IAC/C,MAAM,EAAE,0BAA0B,CAAA;CACnC,CAAC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAA;AAEtE,eAAO,MAAM,oBAAoB,iCAAiC,CAAA;AAClE,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,OAAO,CAClC;IACE,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CACd,MAAM,EACN;QACE,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;QAChB,MAAM,EAAE,OAAO,CAAA;KAChB,CACF,CAAA;CACF,EACD,oBAAoB,CACrB,CAAA;AAED,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,eAAe,CAAC,OAAO,CAAC;IACvH,OAAgB,aAAa,EAAE,MAAM,EAAE,CAAuD;IAC9F,OAAgB,mBAAmB,EAAE,MAAM,CAA6B;IACxE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAuB;IAE1D,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,GAAG,SAAS;IAKxI,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS;IASzH,SAAS,CAAC,0BAA0B,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,cAAc;cAQzD,aAAa,CAAC,UAAU,GAAE,aAAa,EAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAyBnG,SAAS,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;CAkB7F"}
@@ -1,7 +1,7 @@
1
1
  import { Promisable } from '@xylabs/promise';
2
2
  import { AbstractDiviner } from '@xyo-network/diviner-abstract';
3
3
  import { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model';
4
- import { Payload } from '@xyo-network/payload-model';
4
+ import { Payload, Schema } from '@xyo-network/payload-model';
5
5
  import { EvmCallDivinerLabels } from './Labels';
6
6
  import { EvmCallResult } from './Payload';
7
7
  export type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined];
@@ -22,7 +22,8 @@ export type EvmCallResults = Payload<{
22
22
  }>;
23
23
  }, EvmCallResultsSchema>;
24
24
  export declare class EvmCallDiviner<TParams extends EvmCallDivinerParams = EvmCallDivinerParams> extends AbstractDiviner<TParams> {
25
- static configSchemas: string[];
25
+ static configSchemas: Schema[];
26
+ static defaultConfigSchema: Schema;
26
27
  static labels: EvmCallDivinerLabels;
27
28
  protected static findCallResult<TResult = string>(address: string, functionName: string, payloads: EvmCallResult[]): TResult | undefined;
28
29
  protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../src/Diviner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AACzE,OAAO,EAAyB,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAE3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EAAoB,aAAa,EAAuB,MAAM,WAAW,CAAA;AAEhF,MAAM,MAAM,cAAc,CAAC,OAAO,GAAG,MAAM,EAAE,QAAQ,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;AAEvI,eAAO,MAAM,0BAA0B,wCAAwC,CAAA;AAC/E,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAA;AAE1E,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC;IAC/C,MAAM,EAAE,0BAA0B,CAAA;CACnC,CAAC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAA;AAEtE,eAAO,MAAM,oBAAoB,iCAAiC,CAAA;AAClE,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,OAAO,CAClC;IACE,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CACd,MAAM,EACN;QACE,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;QAChB,MAAM,EAAE,OAAO,CAAA;KAChB,CACF,CAAA;CACF,EACD,oBAAoB,CACrB,CAAA;AAED,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,eAAe,CAAC,OAAO,CAAC;IACvH,OAAgB,aAAa,WAA+B;IAC5D,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAuB;IAE1D,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,GAAG,SAAS;IAKxI,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS;IASzH,SAAS,CAAC,0BAA0B,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,cAAc;cAQzD,aAAa,CAAC,UAAU,GAAE,aAAa,EAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAyBnG,SAAS,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;CAkB7F"}
1
+ {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../src/Diviner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AACzE,OAAO,EAAyB,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAEnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EAAoB,aAAa,EAAuB,MAAM,WAAW,CAAA;AAEhF,MAAM,MAAM,cAAc,CAAC,OAAO,GAAG,MAAM,EAAE,QAAQ,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;AAEvI,eAAO,MAAM,0BAA0B,wCAAwC,CAAA;AAC/E,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAA;AAE1E,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC;IAC/C,MAAM,EAAE,0BAA0B,CAAA;CACnC,CAAC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAA;AAEtE,eAAO,MAAM,oBAAoB,iCAAiC,CAAA;AAClE,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,OAAO,CAClC;IACE,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CACd,MAAM,EACN;QACE,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;QAChB,MAAM,EAAE,OAAO,CAAA;KAChB,CACF,CAAA;CACF,EACD,oBAAoB,CACrB,CAAA;AAED,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,eAAe,CAAC,OAAO,CAAC;IACvH,OAAgB,aAAa,EAAE,MAAM,EAAE,CAAuD;IAC9F,OAAgB,mBAAmB,EAAE,MAAM,CAA6B;IACxE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAuB;IAE1D,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,GAAG,SAAS;IAKxI,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS;IASzH,SAAS,CAAC,0BAA0B,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,cAAc;cAQzD,aAAa,CAAC,UAAU,GAAE,aAAa,EAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAyBnG,SAAS,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;CAkB7F"}
@@ -1,8 +1,10 @@
1
+ import { Schema } from '@xyo-network/payload-model';
1
2
  import { AbstractEvmWitness } from '@xyo-network/witness-evm-abstract';
2
3
  import { EvmCallWitnessParams } from './model';
3
4
  import { EvmCall, EvmCallResult } from './Payload';
4
5
  export declare class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractEvmWitness<TParams, EvmCall, EvmCallResult> {
5
- static configSchemas: string[];
6
+ static configSchemas: Schema[];
7
+ static defaultConfigSchema: Schema;
6
8
  get abi(): string | readonly (string | import("ethers").JsonFragment)[];
7
9
  protected observeHandler(inPayloads?: EvmCall[]): Promise<EvmCallResult[]>;
8
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAGtE,OAAO,EAA8B,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAC1E,OAAO,EAAE,OAAO,EAAE,aAAa,EAAsD,MAAM,WAAW,CAAA;AAEtG,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC;IAClJ,OAAgB,aAAa,WAA+B;IAE5D,IAAI,GAAG,iEAEN;cAEwB,cAAc,CAAC,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAuD9F"}
1
+ {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAIA,OAAO,EAAyB,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAGtE,OAAO,EAA8B,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAC1E,OAAO,EAAE,OAAO,EAAE,aAAa,EAAsD,MAAM,WAAW,CAAA;AAEtG,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC;IAClJ,OAAgB,aAAa,EAAE,MAAM,EAAE,CAAuD;IAC9F,OAAgB,mBAAmB,EAAE,MAAM,CAA6B;IAExE,IAAI,GAAG,iEAEN;cAEwB,cAAc,CAAC,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAuD9F"}
@@ -1,8 +1,10 @@
1
+ import { Schema } from '@xyo-network/payload-model';
1
2
  import { AbstractEvmWitness } from '@xyo-network/witness-evm-abstract';
2
3
  import { EvmCallWitnessParams } from './model';
3
4
  import { EvmCall, EvmCallResult } from './Payload';
4
5
  export declare class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractEvmWitness<TParams, EvmCall, EvmCallResult> {
5
- static configSchemas: string[];
6
+ static configSchemas: Schema[];
7
+ static defaultConfigSchema: Schema;
6
8
  get abi(): string | readonly (string | import("ethers").JsonFragment)[];
7
9
  protected observeHandler(inPayloads?: EvmCall[]): Promise<EvmCallResult[]>;
8
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAGtE,OAAO,EAA8B,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAC1E,OAAO,EAAE,OAAO,EAAE,aAAa,EAAsD,MAAM,WAAW,CAAA;AAEtG,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC;IAClJ,OAAgB,aAAa,WAA+B;IAE5D,IAAI,GAAG,iEAEN;cAEwB,cAAc,CAAC,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAuD9F"}
1
+ {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAIA,OAAO,EAAyB,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAGtE,OAAO,EAA8B,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAC1E,OAAO,EAAE,OAAO,EAAE,aAAa,EAAsD,MAAM,WAAW,CAAA;AAEtG,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC;IAClJ,OAAgB,aAAa,EAAE,MAAM,EAAE,CAAuD;IAC9F,OAAgB,mBAAmB,EAAE,MAAM,CAA6B;IAExE,IAAI,GAAG,iEAEN;cAEwB,cAAc,CAAC,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAuD9F"}
@@ -1,8 +1,10 @@
1
+ import { Schema } from '@xyo-network/payload-model';
1
2
  import { AbstractEvmWitness } from '@xyo-network/witness-evm-abstract';
2
3
  import { EvmCallWitnessParams } from './model';
3
4
  import { EvmCall, EvmCallResult } from './Payload';
4
5
  export declare class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractEvmWitness<TParams, EvmCall, EvmCallResult> {
5
- static configSchemas: string[];
6
+ static configSchemas: Schema[];
7
+ static defaultConfigSchema: Schema;
6
8
  get abi(): string | readonly (string | import("ethers").JsonFragment)[];
7
9
  protected observeHandler(inPayloads?: EvmCall[]): Promise<EvmCallResult[]>;
8
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAGtE,OAAO,EAA8B,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAC1E,OAAO,EAAE,OAAO,EAAE,aAAa,EAAsD,MAAM,WAAW,CAAA;AAEtG,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC;IAClJ,OAAgB,aAAa,WAA+B;IAE5D,IAAI,GAAG,iEAEN;cAEwB,cAAc,CAAC,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAuD9F"}
1
+ {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAIA,OAAO,EAAyB,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAGtE,OAAO,EAA8B,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAC1E,OAAO,EAAE,OAAO,EAAE,aAAa,EAAsD,MAAM,WAAW,CAAA;AAEtG,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC;IAClJ,OAAgB,aAAa,EAAE,MAAM,EAAE,CAAuD;IAC9F,OAAgB,mBAAmB,EAAE,MAAM,CAA6B;IAExE,IAAI,GAAG,iEAEN;cAEwB,cAAc,CAAC,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAuD9F"}
@@ -64,7 +64,8 @@ var asEvmCallFailure = (payload) => isEvmCallFailure(payload) ? payload : void 0
64
64
  var EvmCallDivinerConfigSchema = "network.xyo.evm.call.diviner.config";
65
65
  var EvmCallResultsSchema = "network.xyo.evm.call.results";
66
66
  var EvmCallDiviner = class _EvmCallDiviner extends import_diviner_abstract.AbstractDiviner {
67
- static configSchemas = [EvmCallDivinerConfigSchema];
67
+ static configSchemas = [...super.configSchemas, EvmCallDivinerConfigSchema];
68
+ static defaultConfigSchema = EvmCallDivinerConfigSchema;
68
69
  static labels = EvmCallDivinerLabels;
69
70
  static findCallResult(address, functionName, payloads) {
70
71
  const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address);
@@ -130,7 +131,8 @@ var import_payload_model3 = require("@xyo-network/payload-model");
130
131
  var import_witness_evm_abstract = require("@xyo-network/witness-evm-abstract");
131
132
  var import_ethers = require("ethers");
132
133
  var EvmCallWitness = class extends import_witness_evm_abstract.AbstractEvmWitness {
133
- static configSchemas = [EvmCallWitnessConfigSchema];
134
+ static configSchemas = [...super.configSchemas, EvmCallWitnessConfigSchema];
135
+ static defaultConfigSchema = EvmCallWitnessConfigSchema;
134
136
  get abi() {
135
137
  return (0, import_assert2.assertEx)(this.config.abi, () => "Missing abi");
136
138
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/Labels.ts","../../src/Payload.ts","../../src/model.ts","../../src/Witness.ts"],"sourcesContent":["export * from './Diviner'\nexport * from './Labels'\nexport * from './model'\nexport * from './Payload'\nexport * from './Witness'\n","import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nimport { EvmCallDivinerLabels } from './Labels'\nimport { asEvmCallSuccess, EvmCallResult, EvmCallResultSchema } from './Payload'\n\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\nexport const EvmCallDivinerConfigSchema = 'network.xyo.evm.call.diviner.config'\nexport type EvmCallDivinerConfigSchema = typeof EvmCallDivinerConfigSchema\n\nexport type EvmCallDivinerConfig = DivinerConfig<{\n schema: EvmCallDivinerConfigSchema\n}>\nexport type EvmCallDivinerParams = DivinerParams<EvmCallDivinerConfig>\n\nexport const EvmCallResultsSchema = 'network.xyo.evm.call.results'\nexport type EvmCallResultsSchema = typeof EvmCallResultsSchema\n\nexport type EvmCallResults = Payload<\n {\n address: string\n chainId: number\n results?: Record<\n string,\n {\n args?: unknown[]\n result: unknown\n }\n >\n },\n EvmCallResultsSchema\n>\n\nexport class EvmCallDiviner<TParams extends EvmCallDivinerParams = EvmCallDivinerParams> extends AbstractDiviner<TParams> {\n static override configSchemas = [EvmCallDivinerConfigSchema]\n static labels: EvmCallDivinerLabels = EvmCallDivinerLabels\n\n protected static findCallResult<TResult = string>(address: string, functionName: string, payloads: EvmCallResult[]): TResult | undefined {\n const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address)\n return asEvmCallSuccess(foundPayload)?.result as TResult | undefined\n }\n\n protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined {\n const expectedValue = objs.at(0)?.[field] as R\n // eslint-disable-next-line unicorn/no-array-reduce\n const didNotMatch = objs.reduce((prev, obj) => {\n return prev || obj[field] !== expectedValue\n }, false)\n return didNotMatch ? undefined : expectedValue\n }\n\n protected contractInfoRequiredFields(callResults: EvmCallResult[]): EvmCallResults {\n return {\n address: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'address'), () => 'Mismatched address'),\n chainId: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'chainId'), () => 'Mismatched chainId'),\n schema: EvmCallResultsSchema,\n }\n }\n\n protected override async divineHandler(inPayloads: EvmCallResult[] = []): Promise<EvmCallResults[]> {\n const callResults = inPayloads.filter(isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema))\n const addresses = Object.keys(\n // eslint-disable-next-line unicorn/no-array-reduce\n callResults.reduce<Record<string, boolean>>((prev, result) => {\n if (result.address) {\n prev[result.address] = true\n }\n return prev\n }, {}),\n )\n const result = await Promise.all(\n addresses.map(async (address) => {\n const foundCallResults = callResults.filter((callResult) => callResult.address === address)\n const results: EvmCallResults = {\n results: await this.reduceResults(foundCallResults),\n ...this.contractInfoRequiredFields(foundCallResults),\n }\n return results\n }),\n )\n\n return result\n }\n\n protected reduceResults(callResults: EvmCallResult[]): Promisable<EvmCallResults['results']> {\n // eslint-disable-next-line unicorn/no-array-reduce\n return callResults.reduce<\n Record<\n string,\n {\n args?: unknown[]\n result: unknown\n }\n >\n >((prev, callResult) => {\n const typedCallResult = asEvmCallSuccess(callResult)\n if (typedCallResult) {\n prev[callResult.functionName] = { args: typedCallResult.args, result: typedCallResult?.result }\n }\n return prev\n }, {})\n }\n}\n","import { Labels } from '@xyo-network/module-model'\n\n/**\n * Labels for Crypto Contract Diviner components\n */\nexport interface EvmCallDivinerLabels extends Labels {\n 'network.xyo.crypto.contract.info': 'diviner'\n}\n\n/**\n * Labels for Crypto Contract Diviner components\n */\nexport const EvmCallDivinerLabels: EvmCallDivinerLabels = {\n 'network.xyo.crypto.contract.info': 'diviner',\n}\n","import { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport const EvmCallSchema = 'network.xyo.evm.call'\nexport type EvmCallSchema = typeof EvmCallSchema\n\nexport type EvmCall = Payload<\n {\n address?: string\n args?: unknown[]\n block?: number\n functionName?: string\n },\n EvmCallSchema\n>\n\nexport const EvmCallResultSchema = 'network.xyo.evm.call.result'\nexport type EvmCallResultSchema = typeof EvmCallResultSchema\n\nexport type EvmCallResultBase = Payload<\n {\n address: string\n args: unknown[]\n block?: number\n chainId: number\n functionName: string\n implementation?: string\n },\n EvmCallResultSchema\n>\n\nexport type EvmCallSuccess = EvmCallResultBase & {\n result: unknown\n}\n\nexport type EvmCallFailure = EvmCallResultBase & {\n error: string\n}\n\nexport type EvmCallResult = EvmCallSuccess | EvmCallFailure\n\nexport const isEvmCallSuccess = (payload?: EvmCallResult): payload is EvmCallSuccess => {\n return (payload as EvmCallSuccess | undefined)?.result !== undefined\n}\n\nexport const isEvmCallFailure = (payload?: EvmCallResult): payload is EvmCallFailure => {\n return (payload as EvmCallFailure | undefined)?.error !== undefined\n}\n\nexport const isEvmCallResult = isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema)\n\nexport const asEvmCallSuccess = (payload?: EvmCallResult) => (isEvmCallSuccess(payload) ? payload : undefined)\n\nexport const asEvmCallFailure = (payload?: EvmCallResult) => (isEvmCallFailure(payload) ? payload : undefined)\n","import { EvmWitnessConfig, EvmWitnessParams } from '@xyo-network/witness-evm-abstract'\nimport { JsonFragment } from 'ethers'\n\nexport type Abi = string | ReadonlyArray<JsonFragment | string>\n\nexport const EvmCallWitnessConfigSchema = 'network.xyo.evm.call.witness.config'\nexport type EvmCallWitnessConfigSchema = typeof EvmCallWitnessConfigSchema\n\nexport type EvmCallWitnessConfig = EvmWitnessConfig<\n {\n abi?: Abi\n address?: string\n args?: unknown[]\n block?: number\n functionName?: string\n },\n EvmCallWitnessConfigSchema\n>\n\nexport type EvmCallWitnessParams = EvmWitnessParams<EvmCallWitnessConfig>\n","import { assertEx } from '@xylabs/assert'\nimport { isHexZero } from '@xylabs/hex'\nimport { getErc1822SlotStatus } from '@xyo-network/erc1822-witness'\nimport { getErc1967SlotStatus } from '@xyo-network/erc1967-witness'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport { AbstractEvmWitness } from '@xyo-network/witness-evm-abstract'\nimport { Contract } from 'ethers'\n\nimport { EvmCallWitnessConfigSchema, EvmCallWitnessParams } from './model'\nimport { EvmCall, EvmCallResult, EvmCallResultSchema, EvmCallSchema, EvmCallSuccess } from './Payload'\n\nexport class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractEvmWitness<TParams, EvmCall, EvmCallResult> {\n static override configSchemas = [EvmCallWitnessConfigSchema]\n\n get abi() {\n return assertEx(this.config.abi, () => 'Missing abi')\n }\n\n protected override async observeHandler(inPayloads: EvmCall[] = []): Promise<EvmCallResult[]> {\n await this.started('throw')\n //calling it here to make sure we rests the cache\n await this.getProviders()\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType<EvmCall>(EvmCallSchema)).map(async ({ functionName, args, address, block: payloadBlock }) => {\n const validatedAddress = assertEx(address ?? this.config.address, () => 'Missing address')\n const validatedFunctionName = assertEx(functionName ?? this.config.functionName, () => 'Missing address')\n const mergedArgs = [...(args ?? this.config.args ?? [])]\n\n const provider = await this.getProvider(true, true)\n\n const block = this.config.block ?? payloadBlock ?? (await provider.getBlockNumber())\n\n //Check if ERC-1967 Upgradeable\n const erc1967Status = await getErc1967SlotStatus(provider, validatedAddress, block)\n\n //Check if ERC-1822 Upgradeable\n const erc1822Status = await getErc1822SlotStatus(provider, validatedAddress, block)\n\n const implementation = isHexZero(erc1967Status.slots.implementation ?? '0x00') ? erc1822Status.implementation : erc1967Status.implementation\n\n const contract = new Contract(implementation, this.abi, provider)\n let transformedResult: unknown\n try {\n const result = await contract[validatedFunctionName](...mergedArgs)\n transformedResult = typeof result === 'bigint' ? `0x${result.toString(16)}` : result\n } catch {\n //const error = ex as Error & { code: string }\n //this.logger.error(`Error [${this.config.name}]: ${error.code} : ${error.message}`)\n }\n const observation: EvmCallSuccess = {\n address: validatedAddress,\n args: mergedArgs,\n block,\n chainId: Number((await provider.getNetwork()).chainId),\n functionName: validatedFunctionName,\n result: transformedResult,\n schema: EvmCallResultSchema,\n }\n if (implementation !== validatedAddress) {\n observation.implementation = implementation\n }\n //console.log(`observation: ${JSON.stringify(observation, null, 2)}`)\n return observation\n }),\n )\n return observations\n } catch (ex) {\n const error = ex as Error\n console.log(`Error [${this.config.name}]: ${error.message}`)\n throw error\n }\n }\n}\n"],"mappings":"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","names":["import_payload_model","result","import_assert","import_payload_model"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/Labels.ts","../../src/Payload.ts","../../src/model.ts","../../src/Witness.ts"],"sourcesContent":["export * from './Diviner'\nexport * from './Labels'\nexport * from './model'\nexport * from './Payload'\nexport * from './Witness'\n","import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model'\nimport { isPayloadOfSchemaType, Payload, Schema } from '@xyo-network/payload-model'\n\nimport { EvmCallDivinerLabels } from './Labels'\nimport { asEvmCallSuccess, EvmCallResult, EvmCallResultSchema } from './Payload'\n\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\nexport const EvmCallDivinerConfigSchema = 'network.xyo.evm.call.diviner.config'\nexport type EvmCallDivinerConfigSchema = typeof EvmCallDivinerConfigSchema\n\nexport type EvmCallDivinerConfig = DivinerConfig<{\n schema: EvmCallDivinerConfigSchema\n}>\nexport type EvmCallDivinerParams = DivinerParams<EvmCallDivinerConfig>\n\nexport const EvmCallResultsSchema = 'network.xyo.evm.call.results'\nexport type EvmCallResultsSchema = typeof EvmCallResultsSchema\n\nexport type EvmCallResults = Payload<\n {\n address: string\n chainId: number\n results?: Record<\n string,\n {\n args?: unknown[]\n result: unknown\n }\n >\n },\n EvmCallResultsSchema\n>\n\nexport class EvmCallDiviner<TParams extends EvmCallDivinerParams = EvmCallDivinerParams> extends AbstractDiviner<TParams> {\n static override configSchemas: Schema[] = [...super.configSchemas, EvmCallDivinerConfigSchema]\n static override defaultConfigSchema: Schema = EvmCallDivinerConfigSchema\n static labels: EvmCallDivinerLabels = EvmCallDivinerLabels\n\n protected static findCallResult<TResult = string>(address: string, functionName: string, payloads: EvmCallResult[]): TResult | undefined {\n const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address)\n return asEvmCallSuccess(foundPayload)?.result as TResult | undefined\n }\n\n protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined {\n const expectedValue = objs.at(0)?.[field] as R\n // eslint-disable-next-line unicorn/no-array-reduce\n const didNotMatch = objs.reduce((prev, obj) => {\n return prev || obj[field] !== expectedValue\n }, false)\n return didNotMatch ? undefined : expectedValue\n }\n\n protected contractInfoRequiredFields(callResults: EvmCallResult[]): EvmCallResults {\n return {\n address: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'address'), () => 'Mismatched address'),\n chainId: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'chainId'), () => 'Mismatched chainId'),\n schema: EvmCallResultsSchema,\n }\n }\n\n protected override async divineHandler(inPayloads: EvmCallResult[] = []): Promise<EvmCallResults[]> {\n const callResults = inPayloads.filter(isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema))\n const addresses = Object.keys(\n // eslint-disable-next-line unicorn/no-array-reduce\n callResults.reduce<Record<string, boolean>>((prev, result) => {\n if (result.address) {\n prev[result.address] = true\n }\n return prev\n }, {}),\n )\n const result = await Promise.all(\n addresses.map(async (address) => {\n const foundCallResults = callResults.filter((callResult) => callResult.address === address)\n const results: EvmCallResults = {\n results: await this.reduceResults(foundCallResults),\n ...this.contractInfoRequiredFields(foundCallResults),\n }\n return results\n }),\n )\n\n return result\n }\n\n protected reduceResults(callResults: EvmCallResult[]): Promisable<EvmCallResults['results']> {\n // eslint-disable-next-line unicorn/no-array-reduce\n return callResults.reduce<\n Record<\n string,\n {\n args?: unknown[]\n result: unknown\n }\n >\n >((prev, callResult) => {\n const typedCallResult = asEvmCallSuccess(callResult)\n if (typedCallResult) {\n prev[callResult.functionName] = { args: typedCallResult.args, result: typedCallResult?.result }\n }\n return prev\n }, {})\n }\n}\n","import { Labels } from '@xyo-network/module-model'\n\n/**\n * Labels for Crypto Contract Diviner components\n */\nexport interface EvmCallDivinerLabels extends Labels {\n 'network.xyo.crypto.contract.info': 'diviner'\n}\n\n/**\n * Labels for Crypto Contract Diviner components\n */\nexport const EvmCallDivinerLabels: EvmCallDivinerLabels = {\n 'network.xyo.crypto.contract.info': 'diviner',\n}\n","import { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport const EvmCallSchema = 'network.xyo.evm.call'\nexport type EvmCallSchema = typeof EvmCallSchema\n\nexport type EvmCall = Payload<\n {\n address?: string\n args?: unknown[]\n block?: number\n functionName?: string\n },\n EvmCallSchema\n>\n\nexport const EvmCallResultSchema = 'network.xyo.evm.call.result'\nexport type EvmCallResultSchema = typeof EvmCallResultSchema\n\nexport type EvmCallResultBase = Payload<\n {\n address: string\n args: unknown[]\n block?: number\n chainId: number\n functionName: string\n implementation?: string\n },\n EvmCallResultSchema\n>\n\nexport type EvmCallSuccess = EvmCallResultBase & {\n result: unknown\n}\n\nexport type EvmCallFailure = EvmCallResultBase & {\n error: string\n}\n\nexport type EvmCallResult = EvmCallSuccess | EvmCallFailure\n\nexport const isEvmCallSuccess = (payload?: EvmCallResult): payload is EvmCallSuccess => {\n return (payload as EvmCallSuccess | undefined)?.result !== undefined\n}\n\nexport const isEvmCallFailure = (payload?: EvmCallResult): payload is EvmCallFailure => {\n return (payload as EvmCallFailure | undefined)?.error !== undefined\n}\n\nexport const isEvmCallResult = isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema)\n\nexport const asEvmCallSuccess = (payload?: EvmCallResult) => (isEvmCallSuccess(payload) ? payload : undefined)\n\nexport const asEvmCallFailure = (payload?: EvmCallResult) => (isEvmCallFailure(payload) ? payload : undefined)\n","import { EvmWitnessConfig, EvmWitnessParams } from '@xyo-network/witness-evm-abstract'\nimport { JsonFragment } from 'ethers'\n\nexport type Abi = string | ReadonlyArray<JsonFragment | string>\n\nexport const EvmCallWitnessConfigSchema = 'network.xyo.evm.call.witness.config'\nexport type EvmCallWitnessConfigSchema = typeof EvmCallWitnessConfigSchema\n\nexport type EvmCallWitnessConfig = EvmWitnessConfig<\n {\n abi?: Abi\n address?: string\n args?: unknown[]\n block?: number\n functionName?: string\n },\n EvmCallWitnessConfigSchema\n>\n\nexport type EvmCallWitnessParams = EvmWitnessParams<EvmCallWitnessConfig>\n","import { assertEx } from '@xylabs/assert'\nimport { isHexZero } from '@xylabs/hex'\nimport { getErc1822SlotStatus } from '@xyo-network/erc1822-witness'\nimport { getErc1967SlotStatus } from '@xyo-network/erc1967-witness'\nimport { isPayloadOfSchemaType, Schema } from '@xyo-network/payload-model'\nimport { AbstractEvmWitness } from '@xyo-network/witness-evm-abstract'\nimport { Contract } from 'ethers'\n\nimport { EvmCallWitnessConfigSchema, EvmCallWitnessParams } from './model'\nimport { EvmCall, EvmCallResult, EvmCallResultSchema, EvmCallSchema, EvmCallSuccess } from './Payload'\n\nexport class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractEvmWitness<TParams, EvmCall, EvmCallResult> {\n static override configSchemas: Schema[] = [...super.configSchemas, EvmCallWitnessConfigSchema]\n static override defaultConfigSchema: Schema = EvmCallWitnessConfigSchema\n\n get abi() {\n return assertEx(this.config.abi, () => 'Missing abi')\n }\n\n protected override async observeHandler(inPayloads: EvmCall[] = []): Promise<EvmCallResult[]> {\n await this.started('throw')\n //calling it here to make sure we rests the cache\n await this.getProviders()\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType<EvmCall>(EvmCallSchema)).map(async ({ functionName, args, address, block: payloadBlock }) => {\n const validatedAddress = assertEx(address ?? this.config.address, () => 'Missing address')\n const validatedFunctionName = assertEx(functionName ?? this.config.functionName, () => 'Missing address')\n const mergedArgs = [...(args ?? this.config.args ?? [])]\n\n const provider = await this.getProvider(true, true)\n\n const block = this.config.block ?? payloadBlock ?? (await provider.getBlockNumber())\n\n //Check if ERC-1967 Upgradeable\n const erc1967Status = await getErc1967SlotStatus(provider, validatedAddress, block)\n\n //Check if ERC-1822 Upgradeable\n const erc1822Status = await getErc1822SlotStatus(provider, validatedAddress, block)\n\n const implementation = isHexZero(erc1967Status.slots.implementation ?? '0x00') ? erc1822Status.implementation : erc1967Status.implementation\n\n const contract = new Contract(implementation, this.abi, provider)\n let transformedResult: unknown\n try {\n const result = await contract[validatedFunctionName](...mergedArgs)\n transformedResult = typeof result === 'bigint' ? `0x${result.toString(16)}` : result\n } catch {\n //const error = ex as Error & { code: string }\n //this.logger.error(`Error [${this.config.name}]: ${error.code} : ${error.message}`)\n }\n const observation: EvmCallSuccess = {\n address: validatedAddress,\n args: mergedArgs,\n block,\n chainId: Number((await provider.getNetwork()).chainId),\n functionName: validatedFunctionName,\n result: transformedResult,\n schema: EvmCallResultSchema,\n }\n if (implementation !== validatedAddress) {\n observation.implementation = implementation\n }\n //console.log(`observation: ${JSON.stringify(observation, null, 2)}`)\n return observation\n }),\n )\n return observations\n } catch (ex) {\n const error = ex as Error\n console.log(`Error [${this.config.name}]: ${error.message}`)\n throw error\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,oBAAyB;AAEzB,8BAAgC;AAEhC,IAAAA,wBAAuD;;;ACQhD,IAAM,uBAA6C;AAAA,EACxD,oCAAoC;AACtC;;;ACdA,2BAA+C;AAExC,IAAM,gBAAgB;AAatB,IAAM,sBAAsB;AAyB5B,IAAM,mBAAmB,CAAC,YAAuD;AACtF,SAAQ,SAAwC,WAAW;AAC7D;AAEO,IAAM,mBAAmB,CAAC,YAAuD;AACtF,SAAQ,SAAwC,UAAU;AAC5D;AAEO,IAAM,sBAAkB,4CAAqC,mBAAmB;AAEhF,IAAM,mBAAmB,CAAC,YAA6B,iBAAiB,OAAO,IAAI,UAAU;AAE7F,IAAM,mBAAmB,CAAC,YAA6B,iBAAiB,OAAO,IAAI,UAAU;;;AFzC7F,IAAM,6BAA6B;AAQnC,IAAM,uBAAuB;AAkB7B,IAAM,iBAAN,MAAM,wBAAoF,wCAAyB;AAAA,EACxH,OAAgB,gBAA0B,CAAC,GAAG,MAAM,eAAe,0BAA0B;AAAA,EAC7F,OAAgB,sBAA8B;AAAA,EAC9C,OAAO,SAA+B;AAAA,EAEtC,OAAiB,eAAiC,SAAiB,cAAsB,UAAgD;AACvI,UAAM,eAAe,SAAS,KAAK,CAAC,YAAY,QAAQ,iBAAiB,gBAAgB,QAAQ,YAAY,OAAO;AACpH,WAAO,iBAAiB,YAAY,GAAG;AAAA,EACzC;AAAA,EAEA,OAAiB,sBAA+D,MAAW,OAA+B;AACxH,UAAM,gBAAgB,KAAK,GAAG,CAAC,IAAI,KAAK;AAExC,UAAM,cAAc,KAAK,OAAO,CAAC,MAAM,QAAQ;AAC7C,aAAO,QAAQ,IAAI,KAAK,MAAM;AAAA,IAChC,GAAG,KAAK;AACR,WAAO,cAAc,SAAY;AAAA,EACnC;AAAA,EAEU,2BAA2B,aAA8C;AACjF,WAAO;AAAA,MACL,aAAS,wBAAS,gBAAe,sBAAsB,aAAa,SAAS,GAAG,MAAM,oBAAoB;AAAA,MAC1G,aAAS,wBAAS,gBAAe,sBAAsB,aAAa,SAAS,GAAG,MAAM,oBAAoB;AAAA,MAC1G,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAyB,cAAc,aAA8B,CAAC,GAA8B;AAClG,UAAM,cAAc,WAAW,WAAO,6CAAqC,mBAAmB,CAAC;AAC/F,UAAM,YAAY,OAAO;AAAA;AAAA,MAEvB,YAAY,OAAgC,CAAC,MAAMC,YAAW;AAC5D,YAAIA,QAAO,SAAS;AAClB,eAAKA,QAAO,OAAO,IAAI;AAAA,QACzB;AACA,eAAO;AAAA,MACT,GAAG,CAAC,CAAC;AAAA,IACP;AACA,UAAM,SAAS,MAAM,QAAQ;AAAA,MAC3B,UAAU,IAAI,OAAO,YAAY;AAC/B,cAAM,mBAAmB,YAAY,OAAO,CAAC,eAAe,WAAW,YAAY,OAAO;AAC1F,cAAM,UAA0B;AAAA,UAC9B,SAAS,MAAM,KAAK,cAAc,gBAAgB;AAAA,UAClD,GAAG,KAAK,2BAA2B,gBAAgB;AAAA,QACrD;AACA,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAAA,EAEU,cAAc,aAAqE;AAE3F,WAAO,YAAY,OAQjB,CAAC,MAAM,eAAe;AACtB,YAAM,kBAAkB,iBAAiB,UAAU;AACnD,UAAI,iBAAiB;AACnB,aAAK,WAAW,YAAY,IAAI,EAAE,MAAM,gBAAgB,MAAM,QAAQ,iBAAiB,OAAO;AAAA,MAChG;AACA,aAAO;AAAA,IACT,GAAG,CAAC,CAAC;AAAA,EACP;AACF;;;AGtGO,IAAM,6BAA6B;;;ACL1C,IAAAC,iBAAyB;AACzB,iBAA0B;AAC1B,6BAAqC;AACrC,6BAAqC;AACrC,IAAAC,wBAA8C;AAC9C,kCAAmC;AACnC,oBAAyB;AAKlB,IAAM,iBAAN,cAA0F,+CAAoD;AAAA,EACnJ,OAAgB,gBAA0B,CAAC,GAAG,MAAM,eAAe,0BAA0B;AAAA,EAC7F,OAAgB,sBAA8B;AAAA,EAE9C,IAAI,MAAM;AACR,eAAO,yBAAS,KAAK,OAAO,KAAK,MAAM,aAAa;AAAA,EACtD;AAAA,EAEA,MAAyB,eAAe,aAAwB,CAAC,GAA6B;AAC5F,UAAM,KAAK,QAAQ,OAAO;AAE1B,UAAM,KAAK,aAAa;AACxB,QAAI;AACF,YAAM,eAAe,MAAM,QAAQ;AAAA,QACjC,WAAW,WAAO,6CAA+B,aAAa,CAAC,EAAE,IAAI,OAAO,EAAE,cAAc,MAAM,SAAS,OAAO,aAAa,MAAM;AACnI,gBAAM,uBAAmB,yBAAS,WAAW,KAAK,OAAO,SAAS,MAAM,iBAAiB;AACzF,gBAAM,4BAAwB,yBAAS,gBAAgB,KAAK,OAAO,cAAc,MAAM,iBAAiB;AACxG,gBAAM,aAAa,CAAC,GAAI,QAAQ,KAAK,OAAO,QAAQ,CAAC,CAAE;AAEvD,gBAAM,WAAW,MAAM,KAAK,YAAY,MAAM,IAAI;AAElD,gBAAM,QAAQ,KAAK,OAAO,SAAS,gBAAiB,MAAM,SAAS,eAAe;AAGlF,gBAAM,gBAAgB,UAAM,6CAAqB,UAAU,kBAAkB,KAAK;AAGlF,gBAAM,gBAAgB,UAAM,6CAAqB,UAAU,kBAAkB,KAAK;AAElF,gBAAM,qBAAiB,sBAAU,cAAc,MAAM,kBAAkB,MAAM,IAAI,cAAc,iBAAiB,cAAc;AAE9H,gBAAM,WAAW,IAAI,uBAAS,gBAAgB,KAAK,KAAK,QAAQ;AAChE,cAAI;AACJ,cAAI;AACF,kBAAM,SAAS,MAAM,SAAS,qBAAqB,EAAE,GAAG,UAAU;AAClE,gCAAoB,OAAO,WAAW,WAAW,KAAK,OAAO,SAAS,EAAE,CAAC,KAAK;AAAA,UAChF,QAAQ;AAAA,UAGR;AACA,gBAAM,cAA8B;AAAA,YAClC,SAAS;AAAA,YACT,MAAM;AAAA,YACN;AAAA,YACA,SAAS,QAAQ,MAAM,SAAS,WAAW,GAAG,OAAO;AAAA,YACrD,cAAc;AAAA,YACd,QAAQ;AAAA,YACR,QAAQ;AAAA,UACV;AACA,cAAI,mBAAmB,kBAAkB;AACvC,wBAAY,iBAAiB;AAAA,UAC/B;AAEA,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AACA,aAAO;AAAA,IACT,SAAS,IAAI;AACX,YAAM,QAAQ;AACd,cAAQ,IAAI,UAAU,KAAK,OAAO,IAAI,MAAM,MAAM,OAAO,EAAE;AAC3D,YAAM;AAAA,IACR;AAAA,EACF;AACF;","names":["import_payload_model","result","import_assert","import_payload_model"]}
@@ -26,7 +26,8 @@ var asEvmCallFailure = (payload) => isEvmCallFailure(payload) ? payload : void 0
26
26
  var EvmCallDivinerConfigSchema = "network.xyo.evm.call.diviner.config";
27
27
  var EvmCallResultsSchema = "network.xyo.evm.call.results";
28
28
  var EvmCallDiviner = class _EvmCallDiviner extends AbstractDiviner {
29
- static configSchemas = [EvmCallDivinerConfigSchema];
29
+ static configSchemas = [...super.configSchemas, EvmCallDivinerConfigSchema];
30
+ static defaultConfigSchema = EvmCallDivinerConfigSchema;
30
31
  static labels = EvmCallDivinerLabels;
31
32
  static findCallResult(address, functionName, payloads) {
32
33
  const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address);
@@ -92,7 +93,8 @@ import { isPayloadOfSchemaType as isPayloadOfSchemaType3 } from "@xyo-network/pa
92
93
  import { AbstractEvmWitness } from "@xyo-network/witness-evm-abstract";
93
94
  import { Contract } from "ethers";
94
95
  var EvmCallWitness = class extends AbstractEvmWitness {
95
- static configSchemas = [EvmCallWitnessConfigSchema];
96
+ static configSchemas = [...super.configSchemas, EvmCallWitnessConfigSchema];
97
+ static defaultConfigSchema = EvmCallWitnessConfigSchema;
96
98
  get abi() {
97
99
  return assertEx2(this.config.abi, () => "Missing abi");
98
100
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Diviner.ts","../../src/Labels.ts","../../src/Payload.ts","../../src/model.ts","../../src/Witness.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nimport { EvmCallDivinerLabels } from './Labels'\nimport { asEvmCallSuccess, EvmCallResult, EvmCallResultSchema } from './Payload'\n\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\nexport const EvmCallDivinerConfigSchema = 'network.xyo.evm.call.diviner.config'\nexport type EvmCallDivinerConfigSchema = typeof EvmCallDivinerConfigSchema\n\nexport type EvmCallDivinerConfig = DivinerConfig<{\n schema: EvmCallDivinerConfigSchema\n}>\nexport type EvmCallDivinerParams = DivinerParams<EvmCallDivinerConfig>\n\nexport const EvmCallResultsSchema = 'network.xyo.evm.call.results'\nexport type EvmCallResultsSchema = typeof EvmCallResultsSchema\n\nexport type EvmCallResults = Payload<\n {\n address: string\n chainId: number\n results?: Record<\n string,\n {\n args?: unknown[]\n result: unknown\n }\n >\n },\n EvmCallResultsSchema\n>\n\nexport class EvmCallDiviner<TParams extends EvmCallDivinerParams = EvmCallDivinerParams> extends AbstractDiviner<TParams> {\n static override configSchemas = [EvmCallDivinerConfigSchema]\n static labels: EvmCallDivinerLabels = EvmCallDivinerLabels\n\n protected static findCallResult<TResult = string>(address: string, functionName: string, payloads: EvmCallResult[]): TResult | undefined {\n const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address)\n return asEvmCallSuccess(foundPayload)?.result as TResult | undefined\n }\n\n protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined {\n const expectedValue = objs.at(0)?.[field] as R\n // eslint-disable-next-line unicorn/no-array-reduce\n const didNotMatch = objs.reduce((prev, obj) => {\n return prev || obj[field] !== expectedValue\n }, false)\n return didNotMatch ? undefined : expectedValue\n }\n\n protected contractInfoRequiredFields(callResults: EvmCallResult[]): EvmCallResults {\n return {\n address: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'address'), () => 'Mismatched address'),\n chainId: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'chainId'), () => 'Mismatched chainId'),\n schema: EvmCallResultsSchema,\n }\n }\n\n protected override async divineHandler(inPayloads: EvmCallResult[] = []): Promise<EvmCallResults[]> {\n const callResults = inPayloads.filter(isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema))\n const addresses = Object.keys(\n // eslint-disable-next-line unicorn/no-array-reduce\n callResults.reduce<Record<string, boolean>>((prev, result) => {\n if (result.address) {\n prev[result.address] = true\n }\n return prev\n }, {}),\n )\n const result = await Promise.all(\n addresses.map(async (address) => {\n const foundCallResults = callResults.filter((callResult) => callResult.address === address)\n const results: EvmCallResults = {\n results: await this.reduceResults(foundCallResults),\n ...this.contractInfoRequiredFields(foundCallResults),\n }\n return results\n }),\n )\n\n return result\n }\n\n protected reduceResults(callResults: EvmCallResult[]): Promisable<EvmCallResults['results']> {\n // eslint-disable-next-line unicorn/no-array-reduce\n return callResults.reduce<\n Record<\n string,\n {\n args?: unknown[]\n result: unknown\n }\n >\n >((prev, callResult) => {\n const typedCallResult = asEvmCallSuccess(callResult)\n if (typedCallResult) {\n prev[callResult.functionName] = { args: typedCallResult.args, result: typedCallResult?.result }\n }\n return prev\n }, {})\n }\n}\n","import { Labels } from '@xyo-network/module-model'\n\n/**\n * Labels for Crypto Contract Diviner components\n */\nexport interface EvmCallDivinerLabels extends Labels {\n 'network.xyo.crypto.contract.info': 'diviner'\n}\n\n/**\n * Labels for Crypto Contract Diviner components\n */\nexport const EvmCallDivinerLabels: EvmCallDivinerLabels = {\n 'network.xyo.crypto.contract.info': 'diviner',\n}\n","import { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport const EvmCallSchema = 'network.xyo.evm.call'\nexport type EvmCallSchema = typeof EvmCallSchema\n\nexport type EvmCall = Payload<\n {\n address?: string\n args?: unknown[]\n block?: number\n functionName?: string\n },\n EvmCallSchema\n>\n\nexport const EvmCallResultSchema = 'network.xyo.evm.call.result'\nexport type EvmCallResultSchema = typeof EvmCallResultSchema\n\nexport type EvmCallResultBase = Payload<\n {\n address: string\n args: unknown[]\n block?: number\n chainId: number\n functionName: string\n implementation?: string\n },\n EvmCallResultSchema\n>\n\nexport type EvmCallSuccess = EvmCallResultBase & {\n result: unknown\n}\n\nexport type EvmCallFailure = EvmCallResultBase & {\n error: string\n}\n\nexport type EvmCallResult = EvmCallSuccess | EvmCallFailure\n\nexport const isEvmCallSuccess = (payload?: EvmCallResult): payload is EvmCallSuccess => {\n return (payload as EvmCallSuccess | undefined)?.result !== undefined\n}\n\nexport const isEvmCallFailure = (payload?: EvmCallResult): payload is EvmCallFailure => {\n return (payload as EvmCallFailure | undefined)?.error !== undefined\n}\n\nexport const isEvmCallResult = isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema)\n\nexport const asEvmCallSuccess = (payload?: EvmCallResult) => (isEvmCallSuccess(payload) ? payload : undefined)\n\nexport const asEvmCallFailure = (payload?: EvmCallResult) => (isEvmCallFailure(payload) ? payload : undefined)\n","import { EvmWitnessConfig, EvmWitnessParams } from '@xyo-network/witness-evm-abstract'\nimport { JsonFragment } from 'ethers'\n\nexport type Abi = string | ReadonlyArray<JsonFragment | string>\n\nexport const EvmCallWitnessConfigSchema = 'network.xyo.evm.call.witness.config'\nexport type EvmCallWitnessConfigSchema = typeof EvmCallWitnessConfigSchema\n\nexport type EvmCallWitnessConfig = EvmWitnessConfig<\n {\n abi?: Abi\n address?: string\n args?: unknown[]\n block?: number\n functionName?: string\n },\n EvmCallWitnessConfigSchema\n>\n\nexport type EvmCallWitnessParams = EvmWitnessParams<EvmCallWitnessConfig>\n","import { assertEx } from '@xylabs/assert'\nimport { isHexZero } from '@xylabs/hex'\nimport { getErc1822SlotStatus } from '@xyo-network/erc1822-witness'\nimport { getErc1967SlotStatus } from '@xyo-network/erc1967-witness'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport { AbstractEvmWitness } from '@xyo-network/witness-evm-abstract'\nimport { Contract } from 'ethers'\n\nimport { EvmCallWitnessConfigSchema, EvmCallWitnessParams } from './model'\nimport { EvmCall, EvmCallResult, EvmCallResultSchema, EvmCallSchema, EvmCallSuccess } from './Payload'\n\nexport class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractEvmWitness<TParams, EvmCall, EvmCallResult> {\n static override configSchemas = [EvmCallWitnessConfigSchema]\n\n get abi() {\n return assertEx(this.config.abi, () => 'Missing abi')\n }\n\n protected override async observeHandler(inPayloads: EvmCall[] = []): Promise<EvmCallResult[]> {\n await this.started('throw')\n //calling it here to make sure we rests the cache\n await this.getProviders()\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType<EvmCall>(EvmCallSchema)).map(async ({ functionName, args, address, block: payloadBlock }) => {\n const validatedAddress = assertEx(address ?? this.config.address, () => 'Missing address')\n const validatedFunctionName = assertEx(functionName ?? this.config.functionName, () => 'Missing address')\n const mergedArgs = [...(args ?? this.config.args ?? [])]\n\n const provider = await this.getProvider(true, true)\n\n const block = this.config.block ?? payloadBlock ?? (await provider.getBlockNumber())\n\n //Check if ERC-1967 Upgradeable\n const erc1967Status = await getErc1967SlotStatus(provider, validatedAddress, block)\n\n //Check if ERC-1822 Upgradeable\n const erc1822Status = await getErc1822SlotStatus(provider, validatedAddress, block)\n\n const implementation = isHexZero(erc1967Status.slots.implementation ?? '0x00') ? erc1822Status.implementation : erc1967Status.implementation\n\n const contract = new Contract(implementation, this.abi, provider)\n let transformedResult: unknown\n try {\n const result = await contract[validatedFunctionName](...mergedArgs)\n transformedResult = typeof result === 'bigint' ? `0x${result.toString(16)}` : result\n } catch {\n //const error = ex as Error & { code: string }\n //this.logger.error(`Error [${this.config.name}]: ${error.code} : ${error.message}`)\n }\n const observation: EvmCallSuccess = {\n address: validatedAddress,\n args: mergedArgs,\n block,\n chainId: Number((await provider.getNetwork()).chainId),\n functionName: validatedFunctionName,\n result: transformedResult,\n schema: EvmCallResultSchema,\n }\n if (implementation !== validatedAddress) {\n observation.implementation = implementation\n }\n //console.log(`observation: ${JSON.stringify(observation, null, 2)}`)\n return observation\n }),\n )\n return observations\n } catch (ex) {\n const error = ex as Error\n console.log(`Error [${this.config.name}]: ${error.message}`)\n throw error\n }\n }\n}\n"],"mappings":"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","names":["isPayloadOfSchemaType","isPayloadOfSchemaType","result","assertEx","isPayloadOfSchemaType","assertEx","isPayloadOfSchemaType"]}
1
+ {"version":3,"sources":["../../src/Diviner.ts","../../src/Labels.ts","../../src/Payload.ts","../../src/model.ts","../../src/Witness.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model'\nimport { isPayloadOfSchemaType, Payload, Schema } from '@xyo-network/payload-model'\n\nimport { EvmCallDivinerLabels } from './Labels'\nimport { asEvmCallSuccess, EvmCallResult, EvmCallResultSchema } from './Payload'\n\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\nexport const EvmCallDivinerConfigSchema = 'network.xyo.evm.call.diviner.config'\nexport type EvmCallDivinerConfigSchema = typeof EvmCallDivinerConfigSchema\n\nexport type EvmCallDivinerConfig = DivinerConfig<{\n schema: EvmCallDivinerConfigSchema\n}>\nexport type EvmCallDivinerParams = DivinerParams<EvmCallDivinerConfig>\n\nexport const EvmCallResultsSchema = 'network.xyo.evm.call.results'\nexport type EvmCallResultsSchema = typeof EvmCallResultsSchema\n\nexport type EvmCallResults = Payload<\n {\n address: string\n chainId: number\n results?: Record<\n string,\n {\n args?: unknown[]\n result: unknown\n }\n >\n },\n EvmCallResultsSchema\n>\n\nexport class EvmCallDiviner<TParams extends EvmCallDivinerParams = EvmCallDivinerParams> extends AbstractDiviner<TParams> {\n static override configSchemas: Schema[] = [...super.configSchemas, EvmCallDivinerConfigSchema]\n static override defaultConfigSchema: Schema = EvmCallDivinerConfigSchema\n static labels: EvmCallDivinerLabels = EvmCallDivinerLabels\n\n protected static findCallResult<TResult = string>(address: string, functionName: string, payloads: EvmCallResult[]): TResult | undefined {\n const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address)\n return asEvmCallSuccess(foundPayload)?.result as TResult | undefined\n }\n\n protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined {\n const expectedValue = objs.at(0)?.[field] as R\n // eslint-disable-next-line unicorn/no-array-reduce\n const didNotMatch = objs.reduce((prev, obj) => {\n return prev || obj[field] !== expectedValue\n }, false)\n return didNotMatch ? undefined : expectedValue\n }\n\n protected contractInfoRequiredFields(callResults: EvmCallResult[]): EvmCallResults {\n return {\n address: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'address'), () => 'Mismatched address'),\n chainId: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'chainId'), () => 'Mismatched chainId'),\n schema: EvmCallResultsSchema,\n }\n }\n\n protected override async divineHandler(inPayloads: EvmCallResult[] = []): Promise<EvmCallResults[]> {\n const callResults = inPayloads.filter(isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema))\n const addresses = Object.keys(\n // eslint-disable-next-line unicorn/no-array-reduce\n callResults.reduce<Record<string, boolean>>((prev, result) => {\n if (result.address) {\n prev[result.address] = true\n }\n return prev\n }, {}),\n )\n const result = await Promise.all(\n addresses.map(async (address) => {\n const foundCallResults = callResults.filter((callResult) => callResult.address === address)\n const results: EvmCallResults = {\n results: await this.reduceResults(foundCallResults),\n ...this.contractInfoRequiredFields(foundCallResults),\n }\n return results\n }),\n )\n\n return result\n }\n\n protected reduceResults(callResults: EvmCallResult[]): Promisable<EvmCallResults['results']> {\n // eslint-disable-next-line unicorn/no-array-reduce\n return callResults.reduce<\n Record<\n string,\n {\n args?: unknown[]\n result: unknown\n }\n >\n >((prev, callResult) => {\n const typedCallResult = asEvmCallSuccess(callResult)\n if (typedCallResult) {\n prev[callResult.functionName] = { args: typedCallResult.args, result: typedCallResult?.result }\n }\n return prev\n }, {})\n }\n}\n","import { Labels } from '@xyo-network/module-model'\n\n/**\n * Labels for Crypto Contract Diviner components\n */\nexport interface EvmCallDivinerLabels extends Labels {\n 'network.xyo.crypto.contract.info': 'diviner'\n}\n\n/**\n * Labels for Crypto Contract Diviner components\n */\nexport const EvmCallDivinerLabels: EvmCallDivinerLabels = {\n 'network.xyo.crypto.contract.info': 'diviner',\n}\n","import { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport const EvmCallSchema = 'network.xyo.evm.call'\nexport type EvmCallSchema = typeof EvmCallSchema\n\nexport type EvmCall = Payload<\n {\n address?: string\n args?: unknown[]\n block?: number\n functionName?: string\n },\n EvmCallSchema\n>\n\nexport const EvmCallResultSchema = 'network.xyo.evm.call.result'\nexport type EvmCallResultSchema = typeof EvmCallResultSchema\n\nexport type EvmCallResultBase = Payload<\n {\n address: string\n args: unknown[]\n block?: number\n chainId: number\n functionName: string\n implementation?: string\n },\n EvmCallResultSchema\n>\n\nexport type EvmCallSuccess = EvmCallResultBase & {\n result: unknown\n}\n\nexport type EvmCallFailure = EvmCallResultBase & {\n error: string\n}\n\nexport type EvmCallResult = EvmCallSuccess | EvmCallFailure\n\nexport const isEvmCallSuccess = (payload?: EvmCallResult): payload is EvmCallSuccess => {\n return (payload as EvmCallSuccess | undefined)?.result !== undefined\n}\n\nexport const isEvmCallFailure = (payload?: EvmCallResult): payload is EvmCallFailure => {\n return (payload as EvmCallFailure | undefined)?.error !== undefined\n}\n\nexport const isEvmCallResult = isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema)\n\nexport const asEvmCallSuccess = (payload?: EvmCallResult) => (isEvmCallSuccess(payload) ? payload : undefined)\n\nexport const asEvmCallFailure = (payload?: EvmCallResult) => (isEvmCallFailure(payload) ? payload : undefined)\n","import { EvmWitnessConfig, EvmWitnessParams } from '@xyo-network/witness-evm-abstract'\nimport { JsonFragment } from 'ethers'\n\nexport type Abi = string | ReadonlyArray<JsonFragment | string>\n\nexport const EvmCallWitnessConfigSchema = 'network.xyo.evm.call.witness.config'\nexport type EvmCallWitnessConfigSchema = typeof EvmCallWitnessConfigSchema\n\nexport type EvmCallWitnessConfig = EvmWitnessConfig<\n {\n abi?: Abi\n address?: string\n args?: unknown[]\n block?: number\n functionName?: string\n },\n EvmCallWitnessConfigSchema\n>\n\nexport type EvmCallWitnessParams = EvmWitnessParams<EvmCallWitnessConfig>\n","import { assertEx } from '@xylabs/assert'\nimport { isHexZero } from '@xylabs/hex'\nimport { getErc1822SlotStatus } from '@xyo-network/erc1822-witness'\nimport { getErc1967SlotStatus } from '@xyo-network/erc1967-witness'\nimport { isPayloadOfSchemaType, Schema } from '@xyo-network/payload-model'\nimport { AbstractEvmWitness } from '@xyo-network/witness-evm-abstract'\nimport { Contract } from 'ethers'\n\nimport { EvmCallWitnessConfigSchema, EvmCallWitnessParams } from './model'\nimport { EvmCall, EvmCallResult, EvmCallResultSchema, EvmCallSchema, EvmCallSuccess } from './Payload'\n\nexport class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractEvmWitness<TParams, EvmCall, EvmCallResult> {\n static override configSchemas: Schema[] = [...super.configSchemas, EvmCallWitnessConfigSchema]\n static override defaultConfigSchema: Schema = EvmCallWitnessConfigSchema\n\n get abi() {\n return assertEx(this.config.abi, () => 'Missing abi')\n }\n\n protected override async observeHandler(inPayloads: EvmCall[] = []): Promise<EvmCallResult[]> {\n await this.started('throw')\n //calling it here to make sure we rests the cache\n await this.getProviders()\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType<EvmCall>(EvmCallSchema)).map(async ({ functionName, args, address, block: payloadBlock }) => {\n const validatedAddress = assertEx(address ?? this.config.address, () => 'Missing address')\n const validatedFunctionName = assertEx(functionName ?? this.config.functionName, () => 'Missing address')\n const mergedArgs = [...(args ?? this.config.args ?? [])]\n\n const provider = await this.getProvider(true, true)\n\n const block = this.config.block ?? payloadBlock ?? (await provider.getBlockNumber())\n\n //Check if ERC-1967 Upgradeable\n const erc1967Status = await getErc1967SlotStatus(provider, validatedAddress, block)\n\n //Check if ERC-1822 Upgradeable\n const erc1822Status = await getErc1822SlotStatus(provider, validatedAddress, block)\n\n const implementation = isHexZero(erc1967Status.slots.implementation ?? '0x00') ? erc1822Status.implementation : erc1967Status.implementation\n\n const contract = new Contract(implementation, this.abi, provider)\n let transformedResult: unknown\n try {\n const result = await contract[validatedFunctionName](...mergedArgs)\n transformedResult = typeof result === 'bigint' ? `0x${result.toString(16)}` : result\n } catch {\n //const error = ex as Error & { code: string }\n //this.logger.error(`Error [${this.config.name}]: ${error.code} : ${error.message}`)\n }\n const observation: EvmCallSuccess = {\n address: validatedAddress,\n args: mergedArgs,\n block,\n chainId: Number((await provider.getNetwork()).chainId),\n functionName: validatedFunctionName,\n result: transformedResult,\n schema: EvmCallResultSchema,\n }\n if (implementation !== validatedAddress) {\n observation.implementation = implementation\n }\n //console.log(`observation: ${JSON.stringify(observation, null, 2)}`)\n return observation\n }),\n )\n return observations\n } catch (ex) {\n const error = ex as Error\n console.log(`Error [${this.config.name}]: ${error.message}`)\n throw error\n }\n }\n}\n"],"mappings":"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","names":["isPayloadOfSchemaType","isPayloadOfSchemaType","result","assertEx","isPayloadOfSchemaType","assertEx","isPayloadOfSchemaType"]}
@@ -1,7 +1,7 @@
1
1
  import { Promisable } from '@xylabs/promise';
2
2
  import { AbstractDiviner } from '@xyo-network/diviner-abstract';
3
3
  import { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model';
4
- import { Payload } from '@xyo-network/payload-model';
4
+ import { Payload, Schema } from '@xyo-network/payload-model';
5
5
  import { EvmCallDivinerLabels } from './Labels';
6
6
  import { EvmCallResult } from './Payload';
7
7
  export type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined];
@@ -22,7 +22,8 @@ export type EvmCallResults = Payload<{
22
22
  }>;
23
23
  }, EvmCallResultsSchema>;
24
24
  export declare class EvmCallDiviner<TParams extends EvmCallDivinerParams = EvmCallDivinerParams> extends AbstractDiviner<TParams> {
25
- static configSchemas: string[];
25
+ static configSchemas: Schema[];
26
+ static defaultConfigSchema: Schema;
26
27
  static labels: EvmCallDivinerLabels;
27
28
  protected static findCallResult<TResult = string>(address: string, functionName: string, payloads: EvmCallResult[]): TResult | undefined;
28
29
  protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../src/Diviner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AACzE,OAAO,EAAyB,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAE3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EAAoB,aAAa,EAAuB,MAAM,WAAW,CAAA;AAEhF,MAAM,MAAM,cAAc,CAAC,OAAO,GAAG,MAAM,EAAE,QAAQ,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;AAEvI,eAAO,MAAM,0BAA0B,wCAAwC,CAAA;AAC/E,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAA;AAE1E,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC;IAC/C,MAAM,EAAE,0BAA0B,CAAA;CACnC,CAAC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAA;AAEtE,eAAO,MAAM,oBAAoB,iCAAiC,CAAA;AAClE,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,OAAO,CAClC;IACE,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CACd,MAAM,EACN;QACE,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;QAChB,MAAM,EAAE,OAAO,CAAA;KAChB,CACF,CAAA;CACF,EACD,oBAAoB,CACrB,CAAA;AAED,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,eAAe,CAAC,OAAO,CAAC;IACvH,OAAgB,aAAa,WAA+B;IAC5D,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAuB;IAE1D,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,GAAG,SAAS;IAKxI,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS;IASzH,SAAS,CAAC,0BAA0B,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,cAAc;cAQzD,aAAa,CAAC,UAAU,GAAE,aAAa,EAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAyBnG,SAAS,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;CAkB7F"}
1
+ {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../src/Diviner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AACzE,OAAO,EAAyB,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAEnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EAAoB,aAAa,EAAuB,MAAM,WAAW,CAAA;AAEhF,MAAM,MAAM,cAAc,CAAC,OAAO,GAAG,MAAM,EAAE,QAAQ,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;AAEvI,eAAO,MAAM,0BAA0B,wCAAwC,CAAA;AAC/E,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAA;AAE1E,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC;IAC/C,MAAM,EAAE,0BAA0B,CAAA;CACnC,CAAC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAA;AAEtE,eAAO,MAAM,oBAAoB,iCAAiC,CAAA;AAClE,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,OAAO,CAClC;IACE,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CACd,MAAM,EACN;QACE,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;QAChB,MAAM,EAAE,OAAO,CAAA;KAChB,CACF,CAAA;CACF,EACD,oBAAoB,CACrB,CAAA;AAED,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,eAAe,CAAC,OAAO,CAAC;IACvH,OAAgB,aAAa,EAAE,MAAM,EAAE,CAAuD;IAC9F,OAAgB,mBAAmB,EAAE,MAAM,CAA6B;IACxE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAuB;IAE1D,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,GAAG,SAAS;IAKxI,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS;IASzH,SAAS,CAAC,0BAA0B,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,cAAc;cAQzD,aAAa,CAAC,UAAU,GAAE,aAAa,EAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAyBnG,SAAS,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;CAkB7F"}
@@ -1,7 +1,7 @@
1
1
  import { Promisable } from '@xylabs/promise';
2
2
  import { AbstractDiviner } from '@xyo-network/diviner-abstract';
3
3
  import { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model';
4
- import { Payload } from '@xyo-network/payload-model';
4
+ import { Payload, Schema } from '@xyo-network/payload-model';
5
5
  import { EvmCallDivinerLabels } from './Labels';
6
6
  import { EvmCallResult } from './Payload';
7
7
  export type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined];
@@ -22,7 +22,8 @@ export type EvmCallResults = Payload<{
22
22
  }>;
23
23
  }, EvmCallResultsSchema>;
24
24
  export declare class EvmCallDiviner<TParams extends EvmCallDivinerParams = EvmCallDivinerParams> extends AbstractDiviner<TParams> {
25
- static configSchemas: string[];
25
+ static configSchemas: Schema[];
26
+ static defaultConfigSchema: Schema;
26
27
  static labels: EvmCallDivinerLabels;
27
28
  protected static findCallResult<TResult = string>(address: string, functionName: string, payloads: EvmCallResult[]): TResult | undefined;
28
29
  protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../src/Diviner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AACzE,OAAO,EAAyB,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAE3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EAAoB,aAAa,EAAuB,MAAM,WAAW,CAAA;AAEhF,MAAM,MAAM,cAAc,CAAC,OAAO,GAAG,MAAM,EAAE,QAAQ,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;AAEvI,eAAO,MAAM,0BAA0B,wCAAwC,CAAA;AAC/E,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAA;AAE1E,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC;IAC/C,MAAM,EAAE,0BAA0B,CAAA;CACnC,CAAC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAA;AAEtE,eAAO,MAAM,oBAAoB,iCAAiC,CAAA;AAClE,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,OAAO,CAClC;IACE,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CACd,MAAM,EACN;QACE,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;QAChB,MAAM,EAAE,OAAO,CAAA;KAChB,CACF,CAAA;CACF,EACD,oBAAoB,CACrB,CAAA;AAED,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,eAAe,CAAC,OAAO,CAAC;IACvH,OAAgB,aAAa,WAA+B;IAC5D,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAuB;IAE1D,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,GAAG,SAAS;IAKxI,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS;IASzH,SAAS,CAAC,0BAA0B,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,cAAc;cAQzD,aAAa,CAAC,UAAU,GAAE,aAAa,EAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAyBnG,SAAS,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;CAkB7F"}
1
+ {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../src/Diviner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AACzE,OAAO,EAAyB,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAEnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EAAoB,aAAa,EAAuB,MAAM,WAAW,CAAA;AAEhF,MAAM,MAAM,cAAc,CAAC,OAAO,GAAG,MAAM,EAAE,QAAQ,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;AAEvI,eAAO,MAAM,0BAA0B,wCAAwC,CAAA;AAC/E,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAA;AAE1E,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC;IAC/C,MAAM,EAAE,0BAA0B,CAAA;CACnC,CAAC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAA;AAEtE,eAAO,MAAM,oBAAoB,iCAAiC,CAAA;AAClE,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,OAAO,CAClC;IACE,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CACd,MAAM,EACN;QACE,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;QAChB,MAAM,EAAE,OAAO,CAAA;KAChB,CACF,CAAA;CACF,EACD,oBAAoB,CACrB,CAAA;AAED,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,eAAe,CAAC,OAAO,CAAC;IACvH,OAAgB,aAAa,EAAE,MAAM,EAAE,CAAuD;IAC9F,OAAgB,mBAAmB,EAAE,MAAM,CAA6B;IACxE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAuB;IAE1D,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,GAAG,SAAS;IAKxI,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS;IASzH,SAAS,CAAC,0BAA0B,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,cAAc;cAQzD,aAAa,CAAC,UAAU,GAAE,aAAa,EAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAyBnG,SAAS,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;CAkB7F"}
@@ -1,7 +1,7 @@
1
1
  import { Promisable } from '@xylabs/promise';
2
2
  import { AbstractDiviner } from '@xyo-network/diviner-abstract';
3
3
  import { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model';
4
- import { Payload } from '@xyo-network/payload-model';
4
+ import { Payload, Schema } from '@xyo-network/payload-model';
5
5
  import { EvmCallDivinerLabels } from './Labels';
6
6
  import { EvmCallResult } from './Payload';
7
7
  export type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined];
@@ -22,7 +22,8 @@ export type EvmCallResults = Payload<{
22
22
  }>;
23
23
  }, EvmCallResultsSchema>;
24
24
  export declare class EvmCallDiviner<TParams extends EvmCallDivinerParams = EvmCallDivinerParams> extends AbstractDiviner<TParams> {
25
- static configSchemas: string[];
25
+ static configSchemas: Schema[];
26
+ static defaultConfigSchema: Schema;
26
27
  static labels: EvmCallDivinerLabels;
27
28
  protected static findCallResult<TResult = string>(address: string, functionName: string, payloads: EvmCallResult[]): TResult | undefined;
28
29
  protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../src/Diviner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AACzE,OAAO,EAAyB,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAE3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EAAoB,aAAa,EAAuB,MAAM,WAAW,CAAA;AAEhF,MAAM,MAAM,cAAc,CAAC,OAAO,GAAG,MAAM,EAAE,QAAQ,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;AAEvI,eAAO,MAAM,0BAA0B,wCAAwC,CAAA;AAC/E,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAA;AAE1E,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC;IAC/C,MAAM,EAAE,0BAA0B,CAAA;CACnC,CAAC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAA;AAEtE,eAAO,MAAM,oBAAoB,iCAAiC,CAAA;AAClE,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,OAAO,CAClC;IACE,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CACd,MAAM,EACN;QACE,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;QAChB,MAAM,EAAE,OAAO,CAAA;KAChB,CACF,CAAA;CACF,EACD,oBAAoB,CACrB,CAAA;AAED,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,eAAe,CAAC,OAAO,CAAC;IACvH,OAAgB,aAAa,WAA+B;IAC5D,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAuB;IAE1D,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,GAAG,SAAS;IAKxI,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS;IASzH,SAAS,CAAC,0BAA0B,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,cAAc;cAQzD,aAAa,CAAC,UAAU,GAAE,aAAa,EAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAyBnG,SAAS,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;CAkB7F"}
1
+ {"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../src/Diviner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AACzE,OAAO,EAAyB,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAEnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EAAoB,aAAa,EAAuB,MAAM,WAAW,CAAA;AAEhF,MAAM,MAAM,cAAc,CAAC,OAAO,GAAG,MAAM,EAAE,QAAQ,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;AAEvI,eAAO,MAAM,0BAA0B,wCAAwC,CAAA;AAC/E,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAA;AAE1E,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC;IAC/C,MAAM,EAAE,0BAA0B,CAAA;CACnC,CAAC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAA;AAEtE,eAAO,MAAM,oBAAoB,iCAAiC,CAAA;AAClE,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,OAAO,CAClC;IACE,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CACd,MAAM,EACN;QACE,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;QAChB,MAAM,EAAE,OAAO,CAAA;KAChB,CACF,CAAA;CACF,EACD,oBAAoB,CACrB,CAAA;AAED,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,eAAe,CAAC,OAAO,CAAC;IACvH,OAAgB,aAAa,EAAE,MAAM,EAAE,CAAuD;IAC9F,OAAgB,mBAAmB,EAAE,MAAM,CAA6B;IACxE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAuB;IAE1D,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,GAAG,SAAS;IAKxI,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS;IASzH,SAAS,CAAC,0BAA0B,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,cAAc;cAQzD,aAAa,CAAC,UAAU,GAAE,aAAa,EAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAyBnG,SAAS,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;CAkB7F"}
@@ -1,8 +1,10 @@
1
+ import { Schema } from '@xyo-network/payload-model';
1
2
  import { AbstractEvmWitness } from '@xyo-network/witness-evm-abstract';
2
3
  import { EvmCallWitnessParams } from './model';
3
4
  import { EvmCall, EvmCallResult } from './Payload';
4
5
  export declare class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractEvmWitness<TParams, EvmCall, EvmCallResult> {
5
- static configSchemas: string[];
6
+ static configSchemas: Schema[];
7
+ static defaultConfigSchema: Schema;
6
8
  get abi(): string | readonly (string | import("ethers").JsonFragment)[];
7
9
  protected observeHandler(inPayloads?: EvmCall[]): Promise<EvmCallResult[]>;
8
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAGtE,OAAO,EAA8B,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAC1E,OAAO,EAAE,OAAO,EAAE,aAAa,EAAsD,MAAM,WAAW,CAAA;AAEtG,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC;IAClJ,OAAgB,aAAa,WAA+B;IAE5D,IAAI,GAAG,iEAEN;cAEwB,cAAc,CAAC,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAuD9F"}
1
+ {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAIA,OAAO,EAAyB,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAGtE,OAAO,EAA8B,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAC1E,OAAO,EAAE,OAAO,EAAE,aAAa,EAAsD,MAAM,WAAW,CAAA;AAEtG,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC;IAClJ,OAAgB,aAAa,EAAE,MAAM,EAAE,CAAuD;IAC9F,OAAgB,mBAAmB,EAAE,MAAM,CAA6B;IAExE,IAAI,GAAG,iEAEN;cAEwB,cAAc,CAAC,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAuD9F"}
@@ -1,8 +1,10 @@
1
+ import { Schema } from '@xyo-network/payload-model';
1
2
  import { AbstractEvmWitness } from '@xyo-network/witness-evm-abstract';
2
3
  import { EvmCallWitnessParams } from './model';
3
4
  import { EvmCall, EvmCallResult } from './Payload';
4
5
  export declare class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractEvmWitness<TParams, EvmCall, EvmCallResult> {
5
- static configSchemas: string[];
6
+ static configSchemas: Schema[];
7
+ static defaultConfigSchema: Schema;
6
8
  get abi(): string | readonly (string | import("ethers").JsonFragment)[];
7
9
  protected observeHandler(inPayloads?: EvmCall[]): Promise<EvmCallResult[]>;
8
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAGtE,OAAO,EAA8B,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAC1E,OAAO,EAAE,OAAO,EAAE,aAAa,EAAsD,MAAM,WAAW,CAAA;AAEtG,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC;IAClJ,OAAgB,aAAa,WAA+B;IAE5D,IAAI,GAAG,iEAEN;cAEwB,cAAc,CAAC,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAuD9F"}
1
+ {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAIA,OAAO,EAAyB,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAGtE,OAAO,EAA8B,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAC1E,OAAO,EAAE,OAAO,EAAE,aAAa,EAAsD,MAAM,WAAW,CAAA;AAEtG,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC;IAClJ,OAAgB,aAAa,EAAE,MAAM,EAAE,CAAuD;IAC9F,OAAgB,mBAAmB,EAAE,MAAM,CAA6B;IAExE,IAAI,GAAG,iEAEN;cAEwB,cAAc,CAAC,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAuD9F"}
@@ -1,8 +1,10 @@
1
+ import { Schema } from '@xyo-network/payload-model';
1
2
  import { AbstractEvmWitness } from '@xyo-network/witness-evm-abstract';
2
3
  import { EvmCallWitnessParams } from './model';
3
4
  import { EvmCall, EvmCallResult } from './Payload';
4
5
  export declare class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractEvmWitness<TParams, EvmCall, EvmCallResult> {
5
- static configSchemas: string[];
6
+ static configSchemas: Schema[];
7
+ static defaultConfigSchema: Schema;
6
8
  get abi(): string | readonly (string | import("ethers").JsonFragment)[];
7
9
  protected observeHandler(inPayloads?: EvmCall[]): Promise<EvmCallResult[]>;
8
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAGtE,OAAO,EAA8B,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAC1E,OAAO,EAAE,OAAO,EAAE,aAAa,EAAsD,MAAM,WAAW,CAAA;AAEtG,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC;IAClJ,OAAgB,aAAa,WAA+B;IAE5D,IAAI,GAAG,iEAEN;cAEwB,cAAc,CAAC,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAuD9F"}
1
+ {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAIA,OAAO,EAAyB,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAGtE,OAAO,EAA8B,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAC1E,OAAO,EAAE,OAAO,EAAE,aAAa,EAAsD,MAAM,WAAW,CAAA;AAEtG,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC;IAClJ,OAAgB,aAAa,EAAE,MAAM,EAAE,CAAuD;IAC9F,OAAgB,mBAAmB,EAAE,MAAM,CAA6B;IAExE,IAAI,GAAG,iEAEN;cAEwB,cAAc,CAAC,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAuD9F"}
@@ -64,7 +64,8 @@ var asEvmCallFailure = (payload) => isEvmCallFailure(payload) ? payload : void 0
64
64
  var EvmCallDivinerConfigSchema = "network.xyo.evm.call.diviner.config";
65
65
  var EvmCallResultsSchema = "network.xyo.evm.call.results";
66
66
  var EvmCallDiviner = class _EvmCallDiviner extends import_diviner_abstract.AbstractDiviner {
67
- static configSchemas = [EvmCallDivinerConfigSchema];
67
+ static configSchemas = [...super.configSchemas, EvmCallDivinerConfigSchema];
68
+ static defaultConfigSchema = EvmCallDivinerConfigSchema;
68
69
  static labels = EvmCallDivinerLabels;
69
70
  static findCallResult(address, functionName, payloads) {
70
71
  var _a;
@@ -132,7 +133,8 @@ var import_payload_model3 = require("@xyo-network/payload-model");
132
133
  var import_witness_evm_abstract = require("@xyo-network/witness-evm-abstract");
133
134
  var import_ethers = require("ethers");
134
135
  var EvmCallWitness = class extends import_witness_evm_abstract.AbstractEvmWitness {
135
- static configSchemas = [EvmCallWitnessConfigSchema];
136
+ static configSchemas = [...super.configSchemas, EvmCallWitnessConfigSchema];
137
+ static defaultConfigSchema = EvmCallWitnessConfigSchema;
136
138
  get abi() {
137
139
  return (0, import_assert2.assertEx)(this.config.abi, () => "Missing abi");
138
140
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/Labels.ts","../../src/Payload.ts","../../src/model.ts","../../src/Witness.ts"],"sourcesContent":["export * from './Diviner'\nexport * from './Labels'\nexport * from './model'\nexport * from './Payload'\nexport * from './Witness'\n","import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nimport { EvmCallDivinerLabels } from './Labels'\nimport { asEvmCallSuccess, EvmCallResult, EvmCallResultSchema } from './Payload'\n\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\nexport const EvmCallDivinerConfigSchema = 'network.xyo.evm.call.diviner.config'\nexport type EvmCallDivinerConfigSchema = typeof EvmCallDivinerConfigSchema\n\nexport type EvmCallDivinerConfig = DivinerConfig<{\n schema: EvmCallDivinerConfigSchema\n}>\nexport type EvmCallDivinerParams = DivinerParams<EvmCallDivinerConfig>\n\nexport const EvmCallResultsSchema = 'network.xyo.evm.call.results'\nexport type EvmCallResultsSchema = typeof EvmCallResultsSchema\n\nexport type EvmCallResults = Payload<\n {\n address: string\n chainId: number\n results?: Record<\n string,\n {\n args?: unknown[]\n result: unknown\n }\n >\n },\n EvmCallResultsSchema\n>\n\nexport class EvmCallDiviner<TParams extends EvmCallDivinerParams = EvmCallDivinerParams> extends AbstractDiviner<TParams> {\n static override configSchemas = [EvmCallDivinerConfigSchema]\n static labels: EvmCallDivinerLabels = EvmCallDivinerLabels\n\n protected static findCallResult<TResult = string>(address: string, functionName: string, payloads: EvmCallResult[]): TResult | undefined {\n const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address)\n return asEvmCallSuccess(foundPayload)?.result as TResult | undefined\n }\n\n protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined {\n const expectedValue = objs.at(0)?.[field] as R\n // eslint-disable-next-line unicorn/no-array-reduce\n const didNotMatch = objs.reduce((prev, obj) => {\n return prev || obj[field] !== expectedValue\n }, false)\n return didNotMatch ? undefined : expectedValue\n }\n\n protected contractInfoRequiredFields(callResults: EvmCallResult[]): EvmCallResults {\n return {\n address: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'address'), () => 'Mismatched address'),\n chainId: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'chainId'), () => 'Mismatched chainId'),\n schema: EvmCallResultsSchema,\n }\n }\n\n protected override async divineHandler(inPayloads: EvmCallResult[] = []): Promise<EvmCallResults[]> {\n const callResults = inPayloads.filter(isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema))\n const addresses = Object.keys(\n // eslint-disable-next-line unicorn/no-array-reduce\n callResults.reduce<Record<string, boolean>>((prev, result) => {\n if (result.address) {\n prev[result.address] = true\n }\n return prev\n }, {}),\n )\n const result = await Promise.all(\n addresses.map(async (address) => {\n const foundCallResults = callResults.filter((callResult) => callResult.address === address)\n const results: EvmCallResults = {\n results: await this.reduceResults(foundCallResults),\n ...this.contractInfoRequiredFields(foundCallResults),\n }\n return results\n }),\n )\n\n return result\n }\n\n protected reduceResults(callResults: EvmCallResult[]): Promisable<EvmCallResults['results']> {\n // eslint-disable-next-line unicorn/no-array-reduce\n return callResults.reduce<\n Record<\n string,\n {\n args?: unknown[]\n result: unknown\n }\n >\n >((prev, callResult) => {\n const typedCallResult = asEvmCallSuccess(callResult)\n if (typedCallResult) {\n prev[callResult.functionName] = { args: typedCallResult.args, result: typedCallResult?.result }\n }\n return prev\n }, {})\n }\n}\n","import { Labels } from '@xyo-network/module-model'\n\n/**\n * Labels for Crypto Contract Diviner components\n */\nexport interface EvmCallDivinerLabels extends Labels {\n 'network.xyo.crypto.contract.info': 'diviner'\n}\n\n/**\n * Labels for Crypto Contract Diviner components\n */\nexport const EvmCallDivinerLabels: EvmCallDivinerLabels = {\n 'network.xyo.crypto.contract.info': 'diviner',\n}\n","import { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport const EvmCallSchema = 'network.xyo.evm.call'\nexport type EvmCallSchema = typeof EvmCallSchema\n\nexport type EvmCall = Payload<\n {\n address?: string\n args?: unknown[]\n block?: number\n functionName?: string\n },\n EvmCallSchema\n>\n\nexport const EvmCallResultSchema = 'network.xyo.evm.call.result'\nexport type EvmCallResultSchema = typeof EvmCallResultSchema\n\nexport type EvmCallResultBase = Payload<\n {\n address: string\n args: unknown[]\n block?: number\n chainId: number\n functionName: string\n implementation?: string\n },\n EvmCallResultSchema\n>\n\nexport type EvmCallSuccess = EvmCallResultBase & {\n result: unknown\n}\n\nexport type EvmCallFailure = EvmCallResultBase & {\n error: string\n}\n\nexport type EvmCallResult = EvmCallSuccess | EvmCallFailure\n\nexport const isEvmCallSuccess = (payload?: EvmCallResult): payload is EvmCallSuccess => {\n return (payload as EvmCallSuccess | undefined)?.result !== undefined\n}\n\nexport const isEvmCallFailure = (payload?: EvmCallResult): payload is EvmCallFailure => {\n return (payload as EvmCallFailure | undefined)?.error !== undefined\n}\n\nexport const isEvmCallResult = isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema)\n\nexport const asEvmCallSuccess = (payload?: EvmCallResult) => (isEvmCallSuccess(payload) ? payload : undefined)\n\nexport const asEvmCallFailure = (payload?: EvmCallResult) => (isEvmCallFailure(payload) ? payload : undefined)\n","import { EvmWitnessConfig, EvmWitnessParams } from '@xyo-network/witness-evm-abstract'\nimport { JsonFragment } from 'ethers'\n\nexport type Abi = string | ReadonlyArray<JsonFragment | string>\n\nexport const EvmCallWitnessConfigSchema = 'network.xyo.evm.call.witness.config'\nexport type EvmCallWitnessConfigSchema = typeof EvmCallWitnessConfigSchema\n\nexport type EvmCallWitnessConfig = EvmWitnessConfig<\n {\n abi?: Abi\n address?: string\n args?: unknown[]\n block?: number\n functionName?: string\n },\n EvmCallWitnessConfigSchema\n>\n\nexport type EvmCallWitnessParams = EvmWitnessParams<EvmCallWitnessConfig>\n","import { assertEx } from '@xylabs/assert'\nimport { isHexZero } from '@xylabs/hex'\nimport { getErc1822SlotStatus } from '@xyo-network/erc1822-witness'\nimport { getErc1967SlotStatus } from '@xyo-network/erc1967-witness'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport { AbstractEvmWitness } from '@xyo-network/witness-evm-abstract'\nimport { Contract } from 'ethers'\n\nimport { EvmCallWitnessConfigSchema, EvmCallWitnessParams } from './model'\nimport { EvmCall, EvmCallResult, EvmCallResultSchema, EvmCallSchema, EvmCallSuccess } from './Payload'\n\nexport class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractEvmWitness<TParams, EvmCall, EvmCallResult> {\n static override configSchemas = [EvmCallWitnessConfigSchema]\n\n get abi() {\n return assertEx(this.config.abi, () => 'Missing abi')\n }\n\n protected override async observeHandler(inPayloads: EvmCall[] = []): Promise<EvmCallResult[]> {\n await this.started('throw')\n //calling it here to make sure we rests the cache\n await this.getProviders()\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType<EvmCall>(EvmCallSchema)).map(async ({ functionName, args, address, block: payloadBlock }) => {\n const validatedAddress = assertEx(address ?? this.config.address, () => 'Missing address')\n const validatedFunctionName = assertEx(functionName ?? this.config.functionName, () => 'Missing address')\n const mergedArgs = [...(args ?? this.config.args ?? [])]\n\n const provider = await this.getProvider(true, true)\n\n const block = this.config.block ?? payloadBlock ?? (await provider.getBlockNumber())\n\n //Check if ERC-1967 Upgradeable\n const erc1967Status = await getErc1967SlotStatus(provider, validatedAddress, block)\n\n //Check if ERC-1822 Upgradeable\n const erc1822Status = await getErc1822SlotStatus(provider, validatedAddress, block)\n\n const implementation = isHexZero(erc1967Status.slots.implementation ?? '0x00') ? erc1822Status.implementation : erc1967Status.implementation\n\n const contract = new Contract(implementation, this.abi, provider)\n let transformedResult: unknown\n try {\n const result = await contract[validatedFunctionName](...mergedArgs)\n transformedResult = typeof result === 'bigint' ? `0x${result.toString(16)}` : result\n } catch {\n //const error = ex as Error & { code: string }\n //this.logger.error(`Error [${this.config.name}]: ${error.code} : ${error.message}`)\n }\n const observation: EvmCallSuccess = {\n address: validatedAddress,\n args: mergedArgs,\n block,\n chainId: Number((await provider.getNetwork()).chainId),\n functionName: validatedFunctionName,\n result: transformedResult,\n schema: EvmCallResultSchema,\n }\n if (implementation !== validatedAddress) {\n observation.implementation = implementation\n }\n //console.log(`observation: ${JSON.stringify(observation, null, 2)}`)\n return observation\n }),\n )\n return observations\n } catch (ex) {\n const error = ex as Error\n console.log(`Error [${this.config.name}]: ${error.message}`)\n throw error\n }\n }\n}\n"],"mappings":"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","names":["import_payload_model","result","import_assert","import_payload_model"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/Labels.ts","../../src/Payload.ts","../../src/model.ts","../../src/Witness.ts"],"sourcesContent":["export * from './Diviner'\nexport * from './Labels'\nexport * from './model'\nexport * from './Payload'\nexport * from './Witness'\n","import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model'\nimport { isPayloadOfSchemaType, Payload, Schema } from '@xyo-network/payload-model'\n\nimport { EvmCallDivinerLabels } from './Labels'\nimport { asEvmCallSuccess, EvmCallResult, EvmCallResultSchema } from './Payload'\n\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\nexport const EvmCallDivinerConfigSchema = 'network.xyo.evm.call.diviner.config'\nexport type EvmCallDivinerConfigSchema = typeof EvmCallDivinerConfigSchema\n\nexport type EvmCallDivinerConfig = DivinerConfig<{\n schema: EvmCallDivinerConfigSchema\n}>\nexport type EvmCallDivinerParams = DivinerParams<EvmCallDivinerConfig>\n\nexport const EvmCallResultsSchema = 'network.xyo.evm.call.results'\nexport type EvmCallResultsSchema = typeof EvmCallResultsSchema\n\nexport type EvmCallResults = Payload<\n {\n address: string\n chainId: number\n results?: Record<\n string,\n {\n args?: unknown[]\n result: unknown\n }\n >\n },\n EvmCallResultsSchema\n>\n\nexport class EvmCallDiviner<TParams extends EvmCallDivinerParams = EvmCallDivinerParams> extends AbstractDiviner<TParams> {\n static override configSchemas: Schema[] = [...super.configSchemas, EvmCallDivinerConfigSchema]\n static override defaultConfigSchema: Schema = EvmCallDivinerConfigSchema\n static labels: EvmCallDivinerLabels = EvmCallDivinerLabels\n\n protected static findCallResult<TResult = string>(address: string, functionName: string, payloads: EvmCallResult[]): TResult | undefined {\n const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address)\n return asEvmCallSuccess(foundPayload)?.result as TResult | undefined\n }\n\n protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined {\n const expectedValue = objs.at(0)?.[field] as R\n // eslint-disable-next-line unicorn/no-array-reduce\n const didNotMatch = objs.reduce((prev, obj) => {\n return prev || obj[field] !== expectedValue\n }, false)\n return didNotMatch ? undefined : expectedValue\n }\n\n protected contractInfoRequiredFields(callResults: EvmCallResult[]): EvmCallResults {\n return {\n address: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'address'), () => 'Mismatched address'),\n chainId: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'chainId'), () => 'Mismatched chainId'),\n schema: EvmCallResultsSchema,\n }\n }\n\n protected override async divineHandler(inPayloads: EvmCallResult[] = []): Promise<EvmCallResults[]> {\n const callResults = inPayloads.filter(isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema))\n const addresses = Object.keys(\n // eslint-disable-next-line unicorn/no-array-reduce\n callResults.reduce<Record<string, boolean>>((prev, result) => {\n if (result.address) {\n prev[result.address] = true\n }\n return prev\n }, {}),\n )\n const result = await Promise.all(\n addresses.map(async (address) => {\n const foundCallResults = callResults.filter((callResult) => callResult.address === address)\n const results: EvmCallResults = {\n results: await this.reduceResults(foundCallResults),\n ...this.contractInfoRequiredFields(foundCallResults),\n }\n return results\n }),\n )\n\n return result\n }\n\n protected reduceResults(callResults: EvmCallResult[]): Promisable<EvmCallResults['results']> {\n // eslint-disable-next-line unicorn/no-array-reduce\n return callResults.reduce<\n Record<\n string,\n {\n args?: unknown[]\n result: unknown\n }\n >\n >((prev, callResult) => {\n const typedCallResult = asEvmCallSuccess(callResult)\n if (typedCallResult) {\n prev[callResult.functionName] = { args: typedCallResult.args, result: typedCallResult?.result }\n }\n return prev\n }, {})\n }\n}\n","import { Labels } from '@xyo-network/module-model'\n\n/**\n * Labels for Crypto Contract Diviner components\n */\nexport interface EvmCallDivinerLabels extends Labels {\n 'network.xyo.crypto.contract.info': 'diviner'\n}\n\n/**\n * Labels for Crypto Contract Diviner components\n */\nexport const EvmCallDivinerLabels: EvmCallDivinerLabels = {\n 'network.xyo.crypto.contract.info': 'diviner',\n}\n","import { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport const EvmCallSchema = 'network.xyo.evm.call'\nexport type EvmCallSchema = typeof EvmCallSchema\n\nexport type EvmCall = Payload<\n {\n address?: string\n args?: unknown[]\n block?: number\n functionName?: string\n },\n EvmCallSchema\n>\n\nexport const EvmCallResultSchema = 'network.xyo.evm.call.result'\nexport type EvmCallResultSchema = typeof EvmCallResultSchema\n\nexport type EvmCallResultBase = Payload<\n {\n address: string\n args: unknown[]\n block?: number\n chainId: number\n functionName: string\n implementation?: string\n },\n EvmCallResultSchema\n>\n\nexport type EvmCallSuccess = EvmCallResultBase & {\n result: unknown\n}\n\nexport type EvmCallFailure = EvmCallResultBase & {\n error: string\n}\n\nexport type EvmCallResult = EvmCallSuccess | EvmCallFailure\n\nexport const isEvmCallSuccess = (payload?: EvmCallResult): payload is EvmCallSuccess => {\n return (payload as EvmCallSuccess | undefined)?.result !== undefined\n}\n\nexport const isEvmCallFailure = (payload?: EvmCallResult): payload is EvmCallFailure => {\n return (payload as EvmCallFailure | undefined)?.error !== undefined\n}\n\nexport const isEvmCallResult = isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema)\n\nexport const asEvmCallSuccess = (payload?: EvmCallResult) => (isEvmCallSuccess(payload) ? payload : undefined)\n\nexport const asEvmCallFailure = (payload?: EvmCallResult) => (isEvmCallFailure(payload) ? payload : undefined)\n","import { EvmWitnessConfig, EvmWitnessParams } from '@xyo-network/witness-evm-abstract'\nimport { JsonFragment } from 'ethers'\n\nexport type Abi = string | ReadonlyArray<JsonFragment | string>\n\nexport const EvmCallWitnessConfigSchema = 'network.xyo.evm.call.witness.config'\nexport type EvmCallWitnessConfigSchema = typeof EvmCallWitnessConfigSchema\n\nexport type EvmCallWitnessConfig = EvmWitnessConfig<\n {\n abi?: Abi\n address?: string\n args?: unknown[]\n block?: number\n functionName?: string\n },\n EvmCallWitnessConfigSchema\n>\n\nexport type EvmCallWitnessParams = EvmWitnessParams<EvmCallWitnessConfig>\n","import { assertEx } from '@xylabs/assert'\nimport { isHexZero } from '@xylabs/hex'\nimport { getErc1822SlotStatus } from '@xyo-network/erc1822-witness'\nimport { getErc1967SlotStatus } from '@xyo-network/erc1967-witness'\nimport { isPayloadOfSchemaType, Schema } from '@xyo-network/payload-model'\nimport { AbstractEvmWitness } from '@xyo-network/witness-evm-abstract'\nimport { Contract } from 'ethers'\n\nimport { EvmCallWitnessConfigSchema, EvmCallWitnessParams } from './model'\nimport { EvmCall, EvmCallResult, EvmCallResultSchema, EvmCallSchema, EvmCallSuccess } from './Payload'\n\nexport class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractEvmWitness<TParams, EvmCall, EvmCallResult> {\n static override configSchemas: Schema[] = [...super.configSchemas, EvmCallWitnessConfigSchema]\n static override defaultConfigSchema: Schema = EvmCallWitnessConfigSchema\n\n get abi() {\n return assertEx(this.config.abi, () => 'Missing abi')\n }\n\n protected override async observeHandler(inPayloads: EvmCall[] = []): Promise<EvmCallResult[]> {\n await this.started('throw')\n //calling it here to make sure we rests the cache\n await this.getProviders()\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType<EvmCall>(EvmCallSchema)).map(async ({ functionName, args, address, block: payloadBlock }) => {\n const validatedAddress = assertEx(address ?? this.config.address, () => 'Missing address')\n const validatedFunctionName = assertEx(functionName ?? this.config.functionName, () => 'Missing address')\n const mergedArgs = [...(args ?? this.config.args ?? [])]\n\n const provider = await this.getProvider(true, true)\n\n const block = this.config.block ?? payloadBlock ?? (await provider.getBlockNumber())\n\n //Check if ERC-1967 Upgradeable\n const erc1967Status = await getErc1967SlotStatus(provider, validatedAddress, block)\n\n //Check if ERC-1822 Upgradeable\n const erc1822Status = await getErc1822SlotStatus(provider, validatedAddress, block)\n\n const implementation = isHexZero(erc1967Status.slots.implementation ?? '0x00') ? erc1822Status.implementation : erc1967Status.implementation\n\n const contract = new Contract(implementation, this.abi, provider)\n let transformedResult: unknown\n try {\n const result = await contract[validatedFunctionName](...mergedArgs)\n transformedResult = typeof result === 'bigint' ? `0x${result.toString(16)}` : result\n } catch {\n //const error = ex as Error & { code: string }\n //this.logger.error(`Error [${this.config.name}]: ${error.code} : ${error.message}`)\n }\n const observation: EvmCallSuccess = {\n address: validatedAddress,\n args: mergedArgs,\n block,\n chainId: Number((await provider.getNetwork()).chainId),\n functionName: validatedFunctionName,\n result: transformedResult,\n schema: EvmCallResultSchema,\n }\n if (implementation !== validatedAddress) {\n observation.implementation = implementation\n }\n //console.log(`observation: ${JSON.stringify(observation, null, 2)}`)\n return observation\n }),\n )\n return observations\n } catch (ex) {\n const error = ex as Error\n console.log(`Error [${this.config.name}]: ${error.message}`)\n throw error\n }\n }\n}\n"],"mappings":"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","names":["import_payload_model","result","import_assert","import_payload_model"]}
@@ -26,7 +26,8 @@ var asEvmCallFailure = (payload) => isEvmCallFailure(payload) ? payload : void 0
26
26
  var EvmCallDivinerConfigSchema = "network.xyo.evm.call.diviner.config";
27
27
  var EvmCallResultsSchema = "network.xyo.evm.call.results";
28
28
  var EvmCallDiviner = class _EvmCallDiviner extends AbstractDiviner {
29
- static configSchemas = [EvmCallDivinerConfigSchema];
29
+ static configSchemas = [...super.configSchemas, EvmCallDivinerConfigSchema];
30
+ static defaultConfigSchema = EvmCallDivinerConfigSchema;
30
31
  static labels = EvmCallDivinerLabels;
31
32
  static findCallResult(address, functionName, payloads) {
32
33
  var _a;
@@ -94,7 +95,8 @@ import { isPayloadOfSchemaType as isPayloadOfSchemaType3 } from "@xyo-network/pa
94
95
  import { AbstractEvmWitness } from "@xyo-network/witness-evm-abstract";
95
96
  import { Contract } from "ethers";
96
97
  var EvmCallWitness = class extends AbstractEvmWitness {
97
- static configSchemas = [EvmCallWitnessConfigSchema];
98
+ static configSchemas = [...super.configSchemas, EvmCallWitnessConfigSchema];
99
+ static defaultConfigSchema = EvmCallWitnessConfigSchema;
98
100
  get abi() {
99
101
  return assertEx2(this.config.abi, () => "Missing abi");
100
102
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Diviner.ts","../../src/Labels.ts","../../src/Payload.ts","../../src/model.ts","../../src/Witness.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nimport { EvmCallDivinerLabels } from './Labels'\nimport { asEvmCallSuccess, EvmCallResult, EvmCallResultSchema } from './Payload'\n\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\nexport const EvmCallDivinerConfigSchema = 'network.xyo.evm.call.diviner.config'\nexport type EvmCallDivinerConfigSchema = typeof EvmCallDivinerConfigSchema\n\nexport type EvmCallDivinerConfig = DivinerConfig<{\n schema: EvmCallDivinerConfigSchema\n}>\nexport type EvmCallDivinerParams = DivinerParams<EvmCallDivinerConfig>\n\nexport const EvmCallResultsSchema = 'network.xyo.evm.call.results'\nexport type EvmCallResultsSchema = typeof EvmCallResultsSchema\n\nexport type EvmCallResults = Payload<\n {\n address: string\n chainId: number\n results?: Record<\n string,\n {\n args?: unknown[]\n result: unknown\n }\n >\n },\n EvmCallResultsSchema\n>\n\nexport class EvmCallDiviner<TParams extends EvmCallDivinerParams = EvmCallDivinerParams> extends AbstractDiviner<TParams> {\n static override configSchemas = [EvmCallDivinerConfigSchema]\n static labels: EvmCallDivinerLabels = EvmCallDivinerLabels\n\n protected static findCallResult<TResult = string>(address: string, functionName: string, payloads: EvmCallResult[]): TResult | undefined {\n const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address)\n return asEvmCallSuccess(foundPayload)?.result as TResult | undefined\n }\n\n protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined {\n const expectedValue = objs.at(0)?.[field] as R\n // eslint-disable-next-line unicorn/no-array-reduce\n const didNotMatch = objs.reduce((prev, obj) => {\n return prev || obj[field] !== expectedValue\n }, false)\n return didNotMatch ? undefined : expectedValue\n }\n\n protected contractInfoRequiredFields(callResults: EvmCallResult[]): EvmCallResults {\n return {\n address: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'address'), () => 'Mismatched address'),\n chainId: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'chainId'), () => 'Mismatched chainId'),\n schema: EvmCallResultsSchema,\n }\n }\n\n protected override async divineHandler(inPayloads: EvmCallResult[] = []): Promise<EvmCallResults[]> {\n const callResults = inPayloads.filter(isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema))\n const addresses = Object.keys(\n // eslint-disable-next-line unicorn/no-array-reduce\n callResults.reduce<Record<string, boolean>>((prev, result) => {\n if (result.address) {\n prev[result.address] = true\n }\n return prev\n }, {}),\n )\n const result = await Promise.all(\n addresses.map(async (address) => {\n const foundCallResults = callResults.filter((callResult) => callResult.address === address)\n const results: EvmCallResults = {\n results: await this.reduceResults(foundCallResults),\n ...this.contractInfoRequiredFields(foundCallResults),\n }\n return results\n }),\n )\n\n return result\n }\n\n protected reduceResults(callResults: EvmCallResult[]): Promisable<EvmCallResults['results']> {\n // eslint-disable-next-line unicorn/no-array-reduce\n return callResults.reduce<\n Record<\n string,\n {\n args?: unknown[]\n result: unknown\n }\n >\n >((prev, callResult) => {\n const typedCallResult = asEvmCallSuccess(callResult)\n if (typedCallResult) {\n prev[callResult.functionName] = { args: typedCallResult.args, result: typedCallResult?.result }\n }\n return prev\n }, {})\n }\n}\n","import { Labels } from '@xyo-network/module-model'\n\n/**\n * Labels for Crypto Contract Diviner components\n */\nexport interface EvmCallDivinerLabels extends Labels {\n 'network.xyo.crypto.contract.info': 'diviner'\n}\n\n/**\n * Labels for Crypto Contract Diviner components\n */\nexport const EvmCallDivinerLabels: EvmCallDivinerLabels = {\n 'network.xyo.crypto.contract.info': 'diviner',\n}\n","import { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport const EvmCallSchema = 'network.xyo.evm.call'\nexport type EvmCallSchema = typeof EvmCallSchema\n\nexport type EvmCall = Payload<\n {\n address?: string\n args?: unknown[]\n block?: number\n functionName?: string\n },\n EvmCallSchema\n>\n\nexport const EvmCallResultSchema = 'network.xyo.evm.call.result'\nexport type EvmCallResultSchema = typeof EvmCallResultSchema\n\nexport type EvmCallResultBase = Payload<\n {\n address: string\n args: unknown[]\n block?: number\n chainId: number\n functionName: string\n implementation?: string\n },\n EvmCallResultSchema\n>\n\nexport type EvmCallSuccess = EvmCallResultBase & {\n result: unknown\n}\n\nexport type EvmCallFailure = EvmCallResultBase & {\n error: string\n}\n\nexport type EvmCallResult = EvmCallSuccess | EvmCallFailure\n\nexport const isEvmCallSuccess = (payload?: EvmCallResult): payload is EvmCallSuccess => {\n return (payload as EvmCallSuccess | undefined)?.result !== undefined\n}\n\nexport const isEvmCallFailure = (payload?: EvmCallResult): payload is EvmCallFailure => {\n return (payload as EvmCallFailure | undefined)?.error !== undefined\n}\n\nexport const isEvmCallResult = isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema)\n\nexport const asEvmCallSuccess = (payload?: EvmCallResult) => (isEvmCallSuccess(payload) ? payload : undefined)\n\nexport const asEvmCallFailure = (payload?: EvmCallResult) => (isEvmCallFailure(payload) ? payload : undefined)\n","import { EvmWitnessConfig, EvmWitnessParams } from '@xyo-network/witness-evm-abstract'\nimport { JsonFragment } from 'ethers'\n\nexport type Abi = string | ReadonlyArray<JsonFragment | string>\n\nexport const EvmCallWitnessConfigSchema = 'network.xyo.evm.call.witness.config'\nexport type EvmCallWitnessConfigSchema = typeof EvmCallWitnessConfigSchema\n\nexport type EvmCallWitnessConfig = EvmWitnessConfig<\n {\n abi?: Abi\n address?: string\n args?: unknown[]\n block?: number\n functionName?: string\n },\n EvmCallWitnessConfigSchema\n>\n\nexport type EvmCallWitnessParams = EvmWitnessParams<EvmCallWitnessConfig>\n","import { assertEx } from '@xylabs/assert'\nimport { isHexZero } from '@xylabs/hex'\nimport { getErc1822SlotStatus } from '@xyo-network/erc1822-witness'\nimport { getErc1967SlotStatus } from '@xyo-network/erc1967-witness'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport { AbstractEvmWitness } from '@xyo-network/witness-evm-abstract'\nimport { Contract } from 'ethers'\n\nimport { EvmCallWitnessConfigSchema, EvmCallWitnessParams } from './model'\nimport { EvmCall, EvmCallResult, EvmCallResultSchema, EvmCallSchema, EvmCallSuccess } from './Payload'\n\nexport class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractEvmWitness<TParams, EvmCall, EvmCallResult> {\n static override configSchemas = [EvmCallWitnessConfigSchema]\n\n get abi() {\n return assertEx(this.config.abi, () => 'Missing abi')\n }\n\n protected override async observeHandler(inPayloads: EvmCall[] = []): Promise<EvmCallResult[]> {\n await this.started('throw')\n //calling it here to make sure we rests the cache\n await this.getProviders()\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType<EvmCall>(EvmCallSchema)).map(async ({ functionName, args, address, block: payloadBlock }) => {\n const validatedAddress = assertEx(address ?? this.config.address, () => 'Missing address')\n const validatedFunctionName = assertEx(functionName ?? this.config.functionName, () => 'Missing address')\n const mergedArgs = [...(args ?? this.config.args ?? [])]\n\n const provider = await this.getProvider(true, true)\n\n const block = this.config.block ?? payloadBlock ?? (await provider.getBlockNumber())\n\n //Check if ERC-1967 Upgradeable\n const erc1967Status = await getErc1967SlotStatus(provider, validatedAddress, block)\n\n //Check if ERC-1822 Upgradeable\n const erc1822Status = await getErc1822SlotStatus(provider, validatedAddress, block)\n\n const implementation = isHexZero(erc1967Status.slots.implementation ?? '0x00') ? erc1822Status.implementation : erc1967Status.implementation\n\n const contract = new Contract(implementation, this.abi, provider)\n let transformedResult: unknown\n try {\n const result = await contract[validatedFunctionName](...mergedArgs)\n transformedResult = typeof result === 'bigint' ? `0x${result.toString(16)}` : result\n } catch {\n //const error = ex as Error & { code: string }\n //this.logger.error(`Error [${this.config.name}]: ${error.code} : ${error.message}`)\n }\n const observation: EvmCallSuccess = {\n address: validatedAddress,\n args: mergedArgs,\n block,\n chainId: Number((await provider.getNetwork()).chainId),\n functionName: validatedFunctionName,\n result: transformedResult,\n schema: EvmCallResultSchema,\n }\n if (implementation !== validatedAddress) {\n observation.implementation = implementation\n }\n //console.log(`observation: ${JSON.stringify(observation, null, 2)}`)\n return observation\n }),\n )\n return observations\n } catch (ex) {\n const error = ex as Error\n console.log(`Error [${this.config.name}]: ${error.message}`)\n throw error\n }\n }\n}\n"],"mappings":"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","names":["isPayloadOfSchemaType","isPayloadOfSchemaType","result","assertEx","isPayloadOfSchemaType","assertEx","isPayloadOfSchemaType"]}
1
+ {"version":3,"sources":["../../src/Diviner.ts","../../src/Labels.ts","../../src/Payload.ts","../../src/model.ts","../../src/Witness.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model'\nimport { isPayloadOfSchemaType, Payload, Schema } from '@xyo-network/payload-model'\n\nimport { EvmCallDivinerLabels } from './Labels'\nimport { asEvmCallSuccess, EvmCallResult, EvmCallResultSchema } from './Payload'\n\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\nexport const EvmCallDivinerConfigSchema = 'network.xyo.evm.call.diviner.config'\nexport type EvmCallDivinerConfigSchema = typeof EvmCallDivinerConfigSchema\n\nexport type EvmCallDivinerConfig = DivinerConfig<{\n schema: EvmCallDivinerConfigSchema\n}>\nexport type EvmCallDivinerParams = DivinerParams<EvmCallDivinerConfig>\n\nexport const EvmCallResultsSchema = 'network.xyo.evm.call.results'\nexport type EvmCallResultsSchema = typeof EvmCallResultsSchema\n\nexport type EvmCallResults = Payload<\n {\n address: string\n chainId: number\n results?: Record<\n string,\n {\n args?: unknown[]\n result: unknown\n }\n >\n },\n EvmCallResultsSchema\n>\n\nexport class EvmCallDiviner<TParams extends EvmCallDivinerParams = EvmCallDivinerParams> extends AbstractDiviner<TParams> {\n static override configSchemas: Schema[] = [...super.configSchemas, EvmCallDivinerConfigSchema]\n static override defaultConfigSchema: Schema = EvmCallDivinerConfigSchema\n static labels: EvmCallDivinerLabels = EvmCallDivinerLabels\n\n protected static findCallResult<TResult = string>(address: string, functionName: string, payloads: EvmCallResult[]): TResult | undefined {\n const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address)\n return asEvmCallSuccess(foundPayload)?.result as TResult | undefined\n }\n\n protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined {\n const expectedValue = objs.at(0)?.[field] as R\n // eslint-disable-next-line unicorn/no-array-reduce\n const didNotMatch = objs.reduce((prev, obj) => {\n return prev || obj[field] !== expectedValue\n }, false)\n return didNotMatch ? undefined : expectedValue\n }\n\n protected contractInfoRequiredFields(callResults: EvmCallResult[]): EvmCallResults {\n return {\n address: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'address'), () => 'Mismatched address'),\n chainId: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'chainId'), () => 'Mismatched chainId'),\n schema: EvmCallResultsSchema,\n }\n }\n\n protected override async divineHandler(inPayloads: EvmCallResult[] = []): Promise<EvmCallResults[]> {\n const callResults = inPayloads.filter(isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema))\n const addresses = Object.keys(\n // eslint-disable-next-line unicorn/no-array-reduce\n callResults.reduce<Record<string, boolean>>((prev, result) => {\n if (result.address) {\n prev[result.address] = true\n }\n return prev\n }, {}),\n )\n const result = await Promise.all(\n addresses.map(async (address) => {\n const foundCallResults = callResults.filter((callResult) => callResult.address === address)\n const results: EvmCallResults = {\n results: await this.reduceResults(foundCallResults),\n ...this.contractInfoRequiredFields(foundCallResults),\n }\n return results\n }),\n )\n\n return result\n }\n\n protected reduceResults(callResults: EvmCallResult[]): Promisable<EvmCallResults['results']> {\n // eslint-disable-next-line unicorn/no-array-reduce\n return callResults.reduce<\n Record<\n string,\n {\n args?: unknown[]\n result: unknown\n }\n >\n >((prev, callResult) => {\n const typedCallResult = asEvmCallSuccess(callResult)\n if (typedCallResult) {\n prev[callResult.functionName] = { args: typedCallResult.args, result: typedCallResult?.result }\n }\n return prev\n }, {})\n }\n}\n","import { Labels } from '@xyo-network/module-model'\n\n/**\n * Labels for Crypto Contract Diviner components\n */\nexport interface EvmCallDivinerLabels extends Labels {\n 'network.xyo.crypto.contract.info': 'diviner'\n}\n\n/**\n * Labels for Crypto Contract Diviner components\n */\nexport const EvmCallDivinerLabels: EvmCallDivinerLabels = {\n 'network.xyo.crypto.contract.info': 'diviner',\n}\n","import { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport const EvmCallSchema = 'network.xyo.evm.call'\nexport type EvmCallSchema = typeof EvmCallSchema\n\nexport type EvmCall = Payload<\n {\n address?: string\n args?: unknown[]\n block?: number\n functionName?: string\n },\n EvmCallSchema\n>\n\nexport const EvmCallResultSchema = 'network.xyo.evm.call.result'\nexport type EvmCallResultSchema = typeof EvmCallResultSchema\n\nexport type EvmCallResultBase = Payload<\n {\n address: string\n args: unknown[]\n block?: number\n chainId: number\n functionName: string\n implementation?: string\n },\n EvmCallResultSchema\n>\n\nexport type EvmCallSuccess = EvmCallResultBase & {\n result: unknown\n}\n\nexport type EvmCallFailure = EvmCallResultBase & {\n error: string\n}\n\nexport type EvmCallResult = EvmCallSuccess | EvmCallFailure\n\nexport const isEvmCallSuccess = (payload?: EvmCallResult): payload is EvmCallSuccess => {\n return (payload as EvmCallSuccess | undefined)?.result !== undefined\n}\n\nexport const isEvmCallFailure = (payload?: EvmCallResult): payload is EvmCallFailure => {\n return (payload as EvmCallFailure | undefined)?.error !== undefined\n}\n\nexport const isEvmCallResult = isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema)\n\nexport const asEvmCallSuccess = (payload?: EvmCallResult) => (isEvmCallSuccess(payload) ? payload : undefined)\n\nexport const asEvmCallFailure = (payload?: EvmCallResult) => (isEvmCallFailure(payload) ? payload : undefined)\n","import { EvmWitnessConfig, EvmWitnessParams } from '@xyo-network/witness-evm-abstract'\nimport { JsonFragment } from 'ethers'\n\nexport type Abi = string | ReadonlyArray<JsonFragment | string>\n\nexport const EvmCallWitnessConfigSchema = 'network.xyo.evm.call.witness.config'\nexport type EvmCallWitnessConfigSchema = typeof EvmCallWitnessConfigSchema\n\nexport type EvmCallWitnessConfig = EvmWitnessConfig<\n {\n abi?: Abi\n address?: string\n args?: unknown[]\n block?: number\n functionName?: string\n },\n EvmCallWitnessConfigSchema\n>\n\nexport type EvmCallWitnessParams = EvmWitnessParams<EvmCallWitnessConfig>\n","import { assertEx } from '@xylabs/assert'\nimport { isHexZero } from '@xylabs/hex'\nimport { getErc1822SlotStatus } from '@xyo-network/erc1822-witness'\nimport { getErc1967SlotStatus } from '@xyo-network/erc1967-witness'\nimport { isPayloadOfSchemaType, Schema } from '@xyo-network/payload-model'\nimport { AbstractEvmWitness } from '@xyo-network/witness-evm-abstract'\nimport { Contract } from 'ethers'\n\nimport { EvmCallWitnessConfigSchema, EvmCallWitnessParams } from './model'\nimport { EvmCall, EvmCallResult, EvmCallResultSchema, EvmCallSchema, EvmCallSuccess } from './Payload'\n\nexport class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractEvmWitness<TParams, EvmCall, EvmCallResult> {\n static override configSchemas: Schema[] = [...super.configSchemas, EvmCallWitnessConfigSchema]\n static override defaultConfigSchema: Schema = EvmCallWitnessConfigSchema\n\n get abi() {\n return assertEx(this.config.abi, () => 'Missing abi')\n }\n\n protected override async observeHandler(inPayloads: EvmCall[] = []): Promise<EvmCallResult[]> {\n await this.started('throw')\n //calling it here to make sure we rests the cache\n await this.getProviders()\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType<EvmCall>(EvmCallSchema)).map(async ({ functionName, args, address, block: payloadBlock }) => {\n const validatedAddress = assertEx(address ?? this.config.address, () => 'Missing address')\n const validatedFunctionName = assertEx(functionName ?? this.config.functionName, () => 'Missing address')\n const mergedArgs = [...(args ?? this.config.args ?? [])]\n\n const provider = await this.getProvider(true, true)\n\n const block = this.config.block ?? payloadBlock ?? (await provider.getBlockNumber())\n\n //Check if ERC-1967 Upgradeable\n const erc1967Status = await getErc1967SlotStatus(provider, validatedAddress, block)\n\n //Check if ERC-1822 Upgradeable\n const erc1822Status = await getErc1822SlotStatus(provider, validatedAddress, block)\n\n const implementation = isHexZero(erc1967Status.slots.implementation ?? '0x00') ? erc1822Status.implementation : erc1967Status.implementation\n\n const contract = new Contract(implementation, this.abi, provider)\n let transformedResult: unknown\n try {\n const result = await contract[validatedFunctionName](...mergedArgs)\n transformedResult = typeof result === 'bigint' ? `0x${result.toString(16)}` : result\n } catch {\n //const error = ex as Error & { code: string }\n //this.logger.error(`Error [${this.config.name}]: ${error.code} : ${error.message}`)\n }\n const observation: EvmCallSuccess = {\n address: validatedAddress,\n args: mergedArgs,\n block,\n chainId: Number((await provider.getNetwork()).chainId),\n functionName: validatedFunctionName,\n result: transformedResult,\n schema: EvmCallResultSchema,\n }\n if (implementation !== validatedAddress) {\n observation.implementation = implementation\n }\n //console.log(`observation: ${JSON.stringify(observation, null, 2)}`)\n return observation\n }),\n )\n return observations\n } catch (ex) {\n const error = ex as Error\n console.log(`Error [${this.config.name}]: ${error.message}`)\n throw error\n }\n }\n}\n"],"mappings":"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","names":["isPayloadOfSchemaType","isPayloadOfSchemaType","result","assertEx","isPayloadOfSchemaType","assertEx","isPayloadOfSchemaType"]}
package/package.json CHANGED
@@ -10,45 +10,45 @@
10
10
  "url": "https://github.com/XYOracleNetwork/plugins/issues"
11
11
  },
12
12
  "dependencies": {
13
- "@xylabs/assert": "^3.1.7",
14
- "@xylabs/hex": "^3.1.7",
15
- "@xylabs/promise": "^3.1.7",
16
- "@xyo-network/diviner-abstract": "^2.95.6",
17
- "@xyo-network/diviner-model": "^2.95.6",
18
- "@xyo-network/erc1822-witness": "~2.92.1",
19
- "@xyo-network/erc1967-witness": "~2.92.1",
20
- "@xyo-network/module-model": "^2.95.6",
21
- "@xyo-network/payload-model": "^2.95.6",
22
- "@xyo-network/witness-evm-abstract": "^2.95.6",
13
+ "@xylabs/assert": "^3.1.8",
14
+ "@xylabs/hex": "^3.1.8",
15
+ "@xylabs/promise": "^3.1.8",
16
+ "@xyo-network/diviner-abstract": "^2.97.0",
17
+ "@xyo-network/diviner-model": "^2.97.0",
18
+ "@xyo-network/erc1822-witness": "~2.93.0",
19
+ "@xyo-network/erc1967-witness": "~2.93.0",
20
+ "@xyo-network/module-model": "^2.97.0",
21
+ "@xyo-network/payload-model": "^2.97.0",
22
+ "@xyo-network/witness-evm-abstract": "^2.97.0",
23
23
  "ethers": "^6.12.0"
24
24
  },
25
25
  "devDependencies": {
26
- "@xylabs/delay": "^3.1.7",
27
- "@xylabs/jest-helpers": "^3.1.7",
28
- "@xylabs/profile": "^3.1.7",
29
- "@xylabs/ts-scripts-yarn3": "^3.9.0",
30
- "@xylabs/tsconfig": "^3.9.0",
31
- "@xyo-network/account": "^2.95.6",
32
- "@xyo-network/archivist-memory": "^2.95.6",
33
- "@xyo-network/crypto-contract-function-read-payload-plugin": "~2.92.1",
34
- "@xyo-network/diviner-boundwitness-memory": "^2.95.6",
35
- "@xyo-network/diviner-jsonpatch": "^2.95.6",
36
- "@xyo-network/diviner-jsonpatch-memory": "^2.95.6",
37
- "@xyo-network/diviner-jsonpath-aggregate-memory": "^2.95.6",
38
- "@xyo-network/diviner-payload-memory": "^2.95.6",
39
- "@xyo-network/diviner-payload-model": "^2.95.6",
40
- "@xyo-network/diviner-range": "^2.95.6",
41
- "@xyo-network/diviner-temporal-indexing": "^2.95.6",
42
- "@xyo-network/evm-contract-witness": "~2.92.1",
43
- "@xyo-network/evm-nft-id-payload-plugin": "~2.92.1",
44
- "@xyo-network/evm-token-interface-diviner": "~2.92.1",
45
- "@xyo-network/manifest": "^2.95.6",
46
- "@xyo-network/node-memory": "^2.95.6",
26
+ "@xylabs/delay": "^3.1.8",
27
+ "@xylabs/jest-helpers": "^3.1.8",
28
+ "@xylabs/profile": "^3.1.8",
29
+ "@xylabs/ts-scripts-yarn3": "^3.9.1",
30
+ "@xylabs/tsconfig": "^3.9.1",
31
+ "@xyo-network/account": "^2.97.0",
32
+ "@xyo-network/archivist-memory": "^2.97.0",
33
+ "@xyo-network/crypto-contract-function-read-payload-plugin": "~2.93.0",
34
+ "@xyo-network/diviner-boundwitness-memory": "^2.97.0",
35
+ "@xyo-network/diviner-jsonpatch": "^2.97.0",
36
+ "@xyo-network/diviner-jsonpatch-memory": "^2.97.0",
37
+ "@xyo-network/diviner-jsonpath-aggregate-memory": "^2.97.0",
38
+ "@xyo-network/diviner-payload-memory": "^2.97.0",
39
+ "@xyo-network/diviner-payload-model": "^2.97.0",
40
+ "@xyo-network/diviner-range": "^2.97.0",
41
+ "@xyo-network/diviner-temporal-indexing": "^2.97.0",
42
+ "@xyo-network/evm-contract-witness": "~2.93.0",
43
+ "@xyo-network/evm-nft-id-payload-plugin": "~2.93.0",
44
+ "@xyo-network/evm-token-interface-diviner": "~2.93.0",
45
+ "@xyo-network/manifest": "^2.97.0",
46
+ "@xyo-network/node-memory": "^2.97.0",
47
47
  "@xyo-network/open-zeppelin-typechain": "^3.0.5",
48
- "@xyo-network/sentinel-model": "^2.95.6",
49
- "@xyo-network/witness-adhoc": "^2.95.6",
50
- "@xyo-network/witness-model": "^2.95.6",
51
- "@xyo-network/witness-timestamp": "^2.95.6",
48
+ "@xyo-network/sentinel-model": "^2.97.0",
49
+ "@xyo-network/witness-adhoc": "^2.97.0",
50
+ "@xyo-network/witness-model": "^2.97.0",
51
+ "@xyo-network/witness-timestamp": "^2.97.0",
52
52
  "async-mutex": "^0.5.0",
53
53
  "jest": "^29.7.0",
54
54
  "typescript": "^5.4.5"
@@ -92,6 +92,6 @@
92
92
  "url": "https://github.com/XYOracleNetwork/plugins.git"
93
93
  },
94
94
  "sideEffects": false,
95
- "version": "2.92.1",
95
+ "version": "2.93.0",
96
96
  "type": "module"
97
97
  }
package/src/Diviner.ts CHANGED
@@ -2,7 +2,7 @@ import { assertEx } from '@xylabs/assert'
2
2
  import { Promisable } from '@xylabs/promise'
3
3
  import { AbstractDiviner } from '@xyo-network/diviner-abstract'
4
4
  import { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model'
5
- import { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'
5
+ import { isPayloadOfSchemaType, Payload, Schema } from '@xyo-network/payload-model'
6
6
 
7
7
  import { EvmCallDivinerLabels } from './Labels'
8
8
  import { asEvmCallSuccess, EvmCallResult, EvmCallResultSchema } from './Payload'
@@ -36,7 +36,8 @@ export type EvmCallResults = Payload<
36
36
  >
37
37
 
38
38
  export class EvmCallDiviner<TParams extends EvmCallDivinerParams = EvmCallDivinerParams> extends AbstractDiviner<TParams> {
39
- static override configSchemas = [EvmCallDivinerConfigSchema]
39
+ static override configSchemas: Schema[] = [...super.configSchemas, EvmCallDivinerConfigSchema]
40
+ static override defaultConfigSchema: Schema = EvmCallDivinerConfigSchema
40
41
  static labels: EvmCallDivinerLabels = EvmCallDivinerLabels
41
42
 
42
43
  protected static findCallResult<TResult = string>(address: string, functionName: string, payloads: EvmCallResult[]): TResult | undefined {
package/src/Witness.ts CHANGED
@@ -2,7 +2,7 @@ import { assertEx } from '@xylabs/assert'
2
2
  import { isHexZero } from '@xylabs/hex'
3
3
  import { getErc1822SlotStatus } from '@xyo-network/erc1822-witness'
4
4
  import { getErc1967SlotStatus } from '@xyo-network/erc1967-witness'
5
- import { isPayloadOfSchemaType } from '@xyo-network/payload-model'
5
+ import { isPayloadOfSchemaType, Schema } from '@xyo-network/payload-model'
6
6
  import { AbstractEvmWitness } from '@xyo-network/witness-evm-abstract'
7
7
  import { Contract } from 'ethers'
8
8
 
@@ -10,7 +10,8 @@ import { EvmCallWitnessConfigSchema, EvmCallWitnessParams } from './model'
10
10
  import { EvmCall, EvmCallResult, EvmCallResultSchema, EvmCallSchema, EvmCallSuccess } from './Payload'
11
11
 
12
12
  export class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractEvmWitness<TParams, EvmCall, EvmCallResult> {
13
- static override configSchemas = [EvmCallWitnessConfigSchema]
13
+ static override configSchemas: Schema[] = [...super.configSchemas, EvmCallWitnessConfigSchema]
14
+ static override defaultConfigSchema: Schema = EvmCallWitnessConfigSchema
14
15
 
15
16
  get abi() {
16
17
  return assertEx(this.config.abi, () => 'Missing abi')