forked from tornadocash/classic-ui
58 lines
1.4 KiB
JavaScript
58 lines
1.4 KiB
JavaScript
|
import Web3 from 'web3'
|
||
|
|
||
|
const ABI = [
|
||
|
{
|
||
|
anonymous: false,
|
||
|
inputs: [
|
||
|
{ indexed: true, internalType: 'address', name: 'who', type: 'address' },
|
||
|
{ indexed: false, internalType: 'bytes', name: 'data', type: 'bytes' }
|
||
|
],
|
||
|
name: 'Echo',
|
||
|
type: 'event'
|
||
|
},
|
||
|
{
|
||
|
inputs: [{ internalType: 'bytes', name: '_data', type: 'bytes' }],
|
||
|
name: 'echo',
|
||
|
outputs: [],
|
||
|
stateMutability: 'nonpayable',
|
||
|
type: 'function'
|
||
|
}
|
||
|
]
|
||
|
|
||
|
export class EchoContract {
|
||
|
constructor({ rpcUrl, address }) {
|
||
|
this.web3 = new Web3(rpcUrl)
|
||
|
|
||
|
this.contract = new this.web3.eth.Contract(ABI, address)
|
||
|
this.address = this.contract._address
|
||
|
}
|
||
|
|
||
|
async getEvents({ address, fromBlock = 0, toBlock = 'latest' }) {
|
||
|
try {
|
||
|
return await this.contract.getPastEvents('Echo', {
|
||
|
toBlock,
|
||
|
fromBlock,
|
||
|
filter: { who: address }
|
||
|
})
|
||
|
} catch (err) {
|
||
|
throw new Error(`Method getEvents has error: ${err.message}`)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
async estimateGas({ from, data }) {
|
||
|
try {
|
||
|
return await this.contract.methods.echo(data).estimateGas({ from })
|
||
|
} catch (err) {
|
||
|
throw new Error(`Method estimateGas has error: ${err.message}`)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
getCallData(data) {
|
||
|
try {
|
||
|
return this.contract.methods.echo(data).encodeABI()
|
||
|
} catch (err) {
|
||
|
throw new Error(`Method getCallData has error: ${err.message}`)
|
||
|
}
|
||
|
}
|
||
|
}
|