@faast/ethereum-payments
Version:
Library to assist in processing ethereum payments, such as deriving addresses and sweeping funds
20 lines (16 loc) • 843 B
text/typescript
// deterministically computes the smart contract deposit address given
// the account the will deploy the contract (factory contract)
// the salt as uint256 and the contract bytecode
const Web3 = require('web3')
const web3 = new Web3({})
import { TOKEN_PROXY_DATA } from '../constants'
export function deriveAddress(creatorAddress: string, salt: string, hashed: boolean = false): string {
const address = creatorAddress.replace(/0x/, '').toLowerCase()
const proxy = web3.utils.sha3(TOKEN_PROXY_DATA.replace(/<address to proxy>/g, address))
.replace(/0x/, '').toLowerCase()
let saltHash = (hashed ? salt : web3.utils.sha3(`0x${salt}`)).replace(/0x/, '').toLowerCase()
while (saltHash.length < 64) {
saltHash = `0${saltHash}`
}
return `0x${web3.utils.sha3(`0xff${address}${saltHash}${proxy}`).slice(-40)}`.toLowerCase()
}