diff --git a/src/loom-provider.ts b/src/loom-provider.ts index fd8c764f..4b1341ef 100644 --- a/src/loom-provider.ts +++ b/src/loom-provider.ts @@ -35,6 +35,7 @@ import { import { soliditySha3 } from './solidity-helpers' import { marshalBigUIntPB } from './big-uint' import { SignedEthTxMiddleware } from './middleware' +import { CryptoUtils } from '.' export interface IEthReceipt { transactionHash: string @@ -147,7 +148,7 @@ export class LoomProvider { */ constructor( client: Client, - privateKey: Uint8Array, + privateKeyOrAddress: Uint8Array | Address, setupMiddlewaresFunction?: SetupMiddlewareFunction ) { this._client = client @@ -157,12 +158,21 @@ export class LoomProvider { this._ethRPCMethods = new Map() this.notificationCallbacks = new Array() this.accounts = new Map() + let privateKey: Uint8Array // Only subscribe for event emitter do not call subevents this._client.addListener(ClientEvent.EVMEvent, (msg: IChainEventArgs) => this._onWebSocketMessage(msg) ) + if ('chainId' in privateKeyOrAddress) { + privateKey = CryptoUtils.generatePrivateKey() + this.setMiddlewaresForAddress(privateKeyOrAddress.local.toString(), client.txMiddleware) + this.callerChainId = privateKeyOrAddress.chainId + } else { + privateKey = privateKeyOrAddress + } + if (!this._setupMiddlewares) { this._setupMiddlewares = (client: Client, privateKey: Uint8Array) => { return createDefaultTxMiddleware(client, privateKey as Uint8Array)