before dangerous ops
Signed-off-by: T-Hax <>
This commit is contained in:
parent
4065d89909
commit
704648ed2c
41 changed files with 31021 additions and 460 deletions
|
@ -1,13 +0,0 @@
|
|||
# RPC URLs
|
||||
ETH_MAINNET_TEST_RPC=
|
||||
|
||||
# debug (debug events are logged to console)
|
||||
DEBUG=
|
||||
|
||||
# use tor (torify tests)
|
||||
TORIFY=
|
||||
# tor port (regular = 9050, browser = 9150)
|
||||
TOR_PORT=
|
||||
|
||||
# relayer DOMAIN (the example.xyz in https://example.xyz) for testing
|
||||
TEST_RELAYER_DOMAIN=
|
1
@tornado/sdk-chain/docs/.nojekyll
Normal file
1
@tornado/sdk-chain/docs/.nojekyll
Normal file
|
@ -0,0 +1 @@
|
|||
TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false.
|
|
@ -47,13 +47,14 @@
|
|||
"ganache": "^7.7.7",
|
||||
"mocha": "^10.2.0",
|
||||
"prettier": "^2.3.0",
|
||||
"rimraf": "^4.4.0",
|
||||
"rimraf": "^5.0.0",
|
||||
"source-map-support": "^0.5.19",
|
||||
"ts-essentials": "^9.3.1",
|
||||
"ts-node": "^10.9.1",
|
||||
"tsc-alias": "^1.2.11",
|
||||
"tsconfig-paths": "^4.1.2",
|
||||
"typechain": "^8.1.1",
|
||||
"typedoc": "^0.24.6",
|
||||
"typescript": "^5.0.4"
|
||||
},
|
||||
"scripts": {
|
||||
|
@ -65,7 +66,7 @@
|
|||
"postversion": "git push --follow-tags && npm publish",
|
||||
"lint": "eslint --ext ts,js --fix src",
|
||||
"build-live": "tsc -w && tsc-alias -w",
|
||||
"clean": "rm -rf --interactive=never cache/*",
|
||||
"clean": "rm -rf --interactive=never docs/*",
|
||||
"format": "prettier src/**/*.ts -w"
|
||||
},
|
||||
"files": [
|
||||
|
|
|
@ -70,23 +70,39 @@ export class Chain {
|
|||
public signer?: Signer
|
||||
public provider: Provider
|
||||
private _emptySigner: VoidSigner
|
||||
public chainId?: number
|
||||
public symbol?: string
|
||||
|
||||
private _chainId?: number
|
||||
private _symbol?: string
|
||||
private _fetched: boolean
|
||||
|
||||
constructor(provider: Provider, signer?: Signer) {
|
||||
this.provider = provider
|
||||
this.signer = signer
|
||||
this._emptySigner = new VoidSigner('0x' + randomBytes(20).toString('hex'), provider)
|
||||
this._fetched = false
|
||||
}
|
||||
|
||||
async getChainId(): Promise<number> {
|
||||
if (!this.chainId) this.chainId = (await this.provider.getNetwork()).chainId
|
||||
return this.chainId
|
||||
async fetchChainData(): Promise<void> {
|
||||
const network = await this.provider.getNetwork()
|
||||
this._chainId = network.chainId
|
||||
this._symbol = await Onchain.getNetworkSymbol(String(network.chainId))
|
||||
this._fetched = true
|
||||
}
|
||||
|
||||
async getChainSymbol(): Promise<string> {
|
||||
if (!this.symbol) this.symbol = await Onchain.getNetworkSymbol(String(await this.getChainId()))
|
||||
return this.symbol
|
||||
private _propertiesFetched(parentCallName: string): void {
|
||||
if (!this._fetched)
|
||||
throw ErrorUtils.getError(
|
||||
`Chain.${parentCallName}: properties must be fetched first with \`fetchProperties\`.`
|
||||
)
|
||||
}
|
||||
|
||||
get id(): number {
|
||||
this._propertiesFetched('id')
|
||||
return this._chainId!
|
||||
}
|
||||
get symbol(): string {
|
||||
this._propertiesFetched('symbol')
|
||||
return this._symbol!
|
||||
}
|
||||
|
||||
latestBlockNum(): Promise<number> {
|
||||
|
@ -127,12 +143,12 @@ export class Chain {
|
|||
): Promise<TransactionRequest> {
|
||||
if (callStruct[0].value)
|
||||
return await Multicall3Contract__factory.connect(
|
||||
await Onchain.getMulticall3Address(String(this.chainId)),
|
||||
await Onchain.getMulticall3Address(String(this.id)),
|
||||
this.provider
|
||||
).populateTransaction.aggregate3Value(callStruct as Array<Multicall3.Call3ValueStruct>)
|
||||
|
||||
return await Multicall3Contract__factory.connect(
|
||||
await Onchain.getMulticall3Address(String(this.chainId)),
|
||||
await Onchain.getMulticall3Address(String(this.id)),
|
||||
this.provider
|
||||
).populateTransaction.aggregate3(callStruct)
|
||||
}
|
||||
|
@ -143,12 +159,12 @@ export class Chain {
|
|||
if (this.signer)
|
||||
if (callStruct[0].value)
|
||||
return await Multicall3Contract__factory.connect(
|
||||
await Onchain.getMulticall3Address(String(this.chainId)),
|
||||
await Onchain.getMulticall3Address(String(this.id)),
|
||||
this.signer
|
||||
).aggregate3Value(callStruct as Array<Multicall3.Call3ValueStruct>)
|
||||
else {
|
||||
return await Multicall3Contract__factory.connect(
|
||||
await Onchain.getMulticall3Address(String(this.chainId)),
|
||||
await Onchain.getMulticall3Address(String(this.id)),
|
||||
this.provider
|
||||
).aggregate3(callStruct)
|
||||
}
|
||||
|
@ -181,33 +197,30 @@ export namespace Contracts {
|
|||
type Path = string
|
||||
const contractMap: Map<Path, BaseContract> = new Map<Path, BaseContract>()
|
||||
|
||||
export async function getProxy(
|
||||
network: string,
|
||||
signerOrProvider: Signer | Provider
|
||||
): Promise<TornadoProxy> {
|
||||
export function getProxy(network: string, signerOrProvider: Signer | Provider): TornadoProxy {
|
||||
const key = `TornadoProxy${network}`
|
||||
if (!contractMap.has(key)) {
|
||||
contractMap.set(
|
||||
key,
|
||||
_getContract<TornadoProxy>('TornadoProxy', await Onchain.getProxyAddress(network), signerOrProvider)
|
||||
_getContract<TornadoProxy>('TornadoProxy', Onchain.getProxyAddressSync(network), signerOrProvider)
|
||||
)
|
||||
}
|
||||
return contractMap.get(`TornadoProxy${network}`) as TornadoProxy
|
||||
}
|
||||
|
||||
export async function getInstance(
|
||||
export function getInstance(
|
||||
network: string,
|
||||
token: string,
|
||||
denomination: string,
|
||||
signerOrProvider: Signer | Provider
|
||||
): Promise<TornadoInstance> {
|
||||
): TornadoInstance {
|
||||
const key = `TornadoInstance${network}${token}${denomination}`
|
||||
if (!contractMap.has(key)) {
|
||||
contractMap.set(
|
||||
key,
|
||||
_getContract<TornadoInstance>(
|
||||
'TornadoInstance',
|
||||
await Onchain.getInstanceAddress(network, token, denomination),
|
||||
Onchain.getInstanceAddressSync(network, token, denomination),
|
||||
signerOrProvider
|
||||
)
|
||||
)
|
||||
|
@ -235,7 +248,8 @@ export namespace Contracts {
|
|||
|
||||
export abstract class Synchronizer extends EventEmitter {
|
||||
async sync(
|
||||
event: EventFilter,
|
||||
eventName: string,
|
||||
filter: EventFilter,
|
||||
contract: BaseContract,
|
||||
cache: Cache.Syncable<Docs.Base>,
|
||||
options?: Options.Sync
|
||||
|
@ -301,11 +315,7 @@ export abstract class Synchronizer extends EventEmitter {
|
|||
this.emit('sync', 'synced')
|
||||
|
||||
// Immediately start listening if we're doing this
|
||||
if (_options.listenForEvents) {
|
||||
contract = contract.on(event, (...eventArgs) => {
|
||||
this.emit(cache.name, 'received', cache.db.put(cache.buildDoc(eventArgs[eventArgs.length - 1])))
|
||||
})
|
||||
}
|
||||
if (_options.listenForEvents) this.listenForEvents(eventName, contract, filter, cache)
|
||||
|
||||
// Then wait for all pooler requests to resolve
|
||||
let results = await cache.pooler!.all()
|
||||
|
@ -325,5 +335,21 @@ export abstract class Synchronizer extends EventEmitter {
|
|||
})
|
||||
}
|
||||
|
||||
listenForEvents(
|
||||
name: string,
|
||||
contract: BaseContract,
|
||||
filter: EventFilter,
|
||||
cache: Cache.Syncable<Docs.Base>
|
||||
) {
|
||||
contract.on(filter, (...eventArgs) => {
|
||||
this.emit(name, cache.name, cache.db.put(cache.buildDoc(eventArgs[eventArgs.length - 1])))
|
||||
})
|
||||
}
|
||||
|
||||
clearListenerByIndex(contract: BaseContract, event: EventFilter, listenerIndex: number = 0): void {
|
||||
const listeners = contract.listeners()
|
||||
contract.off(event, listeners[listenerIndex])
|
||||
}
|
||||
|
||||
protected abstract _populateSyncOptions(options?: Options.Sync): Promise<DeepRequired<Options.Sync>>
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue