remix-project mirror
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
remix-project/libs/remix-simulator/src/provider.ts

94 lines
2.7 KiB

import { Blocks } from './methods/blocks'
import { execution } from '@remix-project/remix-lib'
const { executionContext } = execution
import { info } from './utils/logs'
import merge from 'merge'
import { Accounts } from './methods/accounts'
import { Filters } from './methods/filters'
import { methods as miscMethods } from './methods/misc'
import { methods as netMethods } from './methods/net'
import { Transactions } from './methods/transactions'
import { Debug } from './methods/debug'
import { generateBlock } from './genesis'
export class Provider {
options: Record<string, unknown>
executionContext
Accounts
Transactions
methods
host: string
connected: boolean;
constructor (host: string = 'vm', options: Record<string, unknown> = {}) {
this.options = options
this.host = host
this.connected = true
// TODO: init executionContext here
this.executionContext = executionContext
this.Accounts = new Accounts(this.executionContext)
this.Transactions = new Transactions(this.executionContext)
this.methods = {}
this.methods = merge(this.methods, this.Accounts.methods())
this.methods = merge(this.methods, (new Blocks(this.executionContext, options)).methods())
this.methods = merge(this.methods, miscMethods())
this.methods = merge(this.methods, (new Filters(this.executionContext)).methods())
this.methods = merge(this.methods, netMethods())
this.methods = merge(this.methods, this.Transactions.methods())
this.methods = merge(this.methods, (new Debug(this.executionContext)).methods())
generateBlock(this.executionContext)
this.init()
}
async init () {
await this.Accounts.resetAccounts()
this.Transactions.init(this.Accounts.accounts)
}
sendAsync (payload, callback) {
// log.info('payload method is ', payload.method) // commented because, this floods the IDE console
const method = this.methods[payload.method]
if (this.options.logDetails) {
info(payload)
}
if (method) {
return method.call(method, payload, (err, result) => {
if (this.options.logDetails) {
info(err)
info(result)
}
if (err) {
return callback(err)
}
const response = { id: payload.id, jsonrpc: '2.0', result: result }
callback(null, response)
})
}
callback(new Error('unknown method ' + payload.method))
}
send (payload, callback) {
this.sendAsync(payload, callback || function () {})
}
isConnected () {
return true
}
disconnect () {
return false
};
supportsSubscriptions () {
return true;
};
on (type, cb) {
this.executionContext.logsManager.addListener(type, cb)
}
}