-
Notifications
You must be signed in to change notification settings - Fork 265
/
Copy pathutils.js
65 lines (59 loc) · 2.15 KB
/
utils.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// Copied from https://github.com/gnosis/safe-contracts/blob/development/test/utils.js
const util = require('util')
const lightwallet = require('eth-lightwallet')
const { assert } = require('chai')
async function getParamFromTxEvent (transaction, eventName, paramName, contract, contractFactory, subject) {
assert.isObject(transaction)
if (subject != null) {
// logGasUsage(subject, transaction)
}
let logs = transaction.logs
if (eventName != null) {
logs = logs.filter((l) => l.event === eventName && l.address === contract)
}
assert.equal(logs.length, 1, 'too many logs found!')
let param = logs[0].args[paramName]
if (contractFactory != null) {
let contract = await contractFactory.at(param)
assert.isObject(contract, `getting ${paramName} failed for ${param}`)
return contract
} else {
return param
}
}
function logGasUsage (subject, transactionOrReceipt) {
let receipt = transactionOrReceipt.receipt || transactionOrReceipt
console.log(' Gas costs for ' + subject + ': ' + receipt.gasUsed)
}
async function createLightwallet () {
// Create lightwallet accounts
const createVault = util.promisify(lightwallet.keystore.createVault).bind(lightwallet.keystore)
const keystore = await createVault({
hdPathString: "m/44'/60'/0'/0",
seedPhrase: 'pull rent tower word science patrol economy legal yellow kit frequent fat',
password: 'test',
salt: 'testsalt'
})
const keyFromPassword = await util.promisify(keystore.keyFromPassword).bind(keystore)('test')
keystore.generateNewAddress(keyFromPassword, 20)
return {
keystore: keystore,
accounts: keystore.getAddresses(),
passwords: keyFromPassword
}
}
function signTransaction (lw, signers, transactionHash) {
let signatureBytes = '0x'
signers.sort()
for (var i = 0; i < signers.length; i++) {
let sig = lightwallet.signing.signMsgHash(lw.keystore, lw.passwords, transactionHash, signers[i])
signatureBytes += sig.r.toString('hex') + sig.s.toString('hex') + sig.v.toString(16)
}
return signatureBytes
}
Object.assign(exports, {
getParamFromTxEvent, // keep
logGasUsage, // keep
createLightwallet, // keep
signTransaction // keep
})