/// import { Interfaces, PluginInterfaces } from '@open-rights-exchange/chain-js'; import { EthereumAddress, EthereumPrivateKey, EthereumSignature, EthereumTransactionAction } from '../../models'; import { EthereumMultisigRawTransaction } from './gnosisSafeV1/models'; export type EthereumMultisigTransactionOptions = any; export type EthereumMultisigCreateAccountOptions = any; export type EthereumMultisigPluginRawTransaction = any; export interface EthereumMultisigPlugin extends PluginInterfaces.MultisigPlugin { name: string; type: Interfaces.PluginType; init(options: PluginInterfaces.MultisigPluginOptions): Promise; new: { /** Return a new CreateAccount object used to help with creating a new chain account */ CreateAccount(options?: EthereumMultisigCreateAccountOptions): Promise; /** Return a chain Transaction object used to compose and send transactions */ Transaction(options?: EthereumMultisigTransactionOptions): Promise; }; } export interface EthereumMultisigPluginCreateAccount extends PluginInterfaces.MultisigPluginCreateAccount { init(options: EthereumMultisigCreateAccountOptions): Promise; options: EthereumMultisigCreateAccountOptions; owners: EthereumAddress[]; threshold: number; /** Account named used when creating the account */ accountName: EthereumAddress; /** Compose the transaction action needed to create the account */ transactionAction: EthereumTransactionAction; /** If true, an transaction must be sent to chain to create account - use createAccountTransactionAction for action needed */ requiresTransaction: boolean; generateKeysIfNeeded(): Promise; } export interface EthereumMultisigPluginTransaction extends PluginInterfaces.MultisigPluginTransaction { init(options: EthereumMultisigTransactionOptions): Promise; multisigOptions: EthereumMultisigTransactionOptions; owners: EthereumAddress[]; threshold: number; signBuffer: Buffer; /** Whether parent transaction has been set yet */ hasParentTransaction: boolean; /** Whether transaction has been prepared for signing (has raw body) */ hasRawTransaction: boolean; /** List of accounts transaction can be signed by - but have not signed yet */ missingSignatures: EthereumAddress[]; /** Parent transaction is what gets sent to chain * Actual transaction actions are embedded in parent transaction data */ parentRawTransaction: EthereumMultisigRawTransaction; /** Raw transaction type is dependent on each plugin * Note: Set via prepareToBeSigned() or setTransaction() */ rawTransaction: EthereumMultisigPluginRawTransaction; /** An array of the unique set of authorizations needed for all actions in transaction */ requiredAuthorizations: EthereumAddress[]; /** Wether multisigPlugin requires transaction body to be wrapped in a parent transaction * For chains that don't support multisig natively */ requiresParentTransaction?: boolean; /** Ethereum only supports one signature on a transaction so transaction wont ask multisig plugin for signature list - those are data in the contract */ signatures: EthereumSignature[]; /** Add a signature to the set of attached signatures. Automatically de-duplicates values. */ addSignatures(signature: EthereumSignature[]): Promise; setTransaction(transaction: EthereumTransactionAction | EthereumMultisigPluginRawTransaction): Promise; /** Sign the transaction body with private key(s) and add to attached signatures */ sign(privateKeys: EthereumPrivateKey[]): Promise; /** Ensures that the value comforms to a well-formed signature */ toSignature(value: string): EthereumSignature; validate(): Promise; }