Skip to content

Commit adcfc76

Browse files
committed
Added standard reference API tests for ECADD, ECMUL and ECPAIRING evm precompiles for Istanbul comparison
1 parent 748cd1b commit adcfc76

File tree

3 files changed

+66
-0
lines changed

3 files changed

+66
-0
lines changed

tests/api/evm/precompiles/06-ecadd.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
const BN = require('bn.js')
2+
const tape = require('tape')
3+
const Common = require('ethereumjs-common').default
4+
const util = require('ethereumjs-util')
5+
const VM = require('../../../../dist/index').default
6+
const { getPrecompile } = require('../../../../dist/evm/precompiles')
7+
8+
tape('Precompiles: ECADD', (t) => {
9+
t.test('ECADD', (st) => {
10+
const common = new Common('mainnet', 'petersburg')
11+
let vm = new VM({ common: common })
12+
let ECADD = getPrecompile('0000000000000000000000000000000000000006')
13+
14+
let result = ECADD({
15+
data: Buffer.alloc(0),
16+
gasLimit: new BN(0xffff),
17+
_common: common
18+
})
19+
st.deepEqual(result.gasUsed.toNumber(), 500, 'should use petersburg gas costs')
20+
st.end()
21+
})
22+
})

tests/api/evm/precompiles/07-ecmul.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
const BN = require('bn.js')
2+
const tape = require('tape')
3+
const Common = require('ethereumjs-common').default
4+
const util = require('ethereumjs-util')
5+
const VM = require('../../../../dist/index').default
6+
const { getPrecompile } = require('../../../../dist/evm/precompiles')
7+
8+
tape('Precompiles: ECMUL', (t) => {
9+
t.test('ECMUL', (st) => {
10+
const common = new Common('mainnet', 'petersburg')
11+
let vm = new VM({ common: common })
12+
let ECMUL = getPrecompile('0000000000000000000000000000000000000007')
13+
14+
let result = ECMUL({
15+
data: Buffer.alloc(0),
16+
gasLimit: new BN(0xffff),
17+
_common: common
18+
})
19+
st.deepEqual(result.gasUsed.toNumber(), 40000, 'should use petersburg gas costs')
20+
st.end()
21+
})
22+
})
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
const BN = require('bn.js')
2+
const tape = require('tape')
3+
const Common = require('ethereumjs-common').default
4+
const util = require('ethereumjs-util')
5+
const VM = require('../../../../dist/index').default
6+
const { getPrecompile } = require('../../../../dist/evm/precompiles')
7+
8+
tape('Precompiles: ECPAIRING', (t) => {
9+
t.test('ECPAIRING', (st) => {
10+
const common = new Common('mainnet', 'petersburg')
11+
let vm = new VM({ common: common })
12+
let ECPAIRING = getPrecompile('0000000000000000000000000000000000000008')
13+
14+
let result = ECPAIRING({
15+
data: Buffer.from('00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa000000000000000000000000000000000000000000000000000000000000000130644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd45198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa', 'hex'),
16+
gasLimit: new BN(0xffffff),
17+
_common: common
18+
})
19+
st.deepEqual(result.gasUsed.toNumber(), 260000, 'should use petersburg gas costs (k ^= 2 pairings)')
20+
st.end()
21+
})
22+
})

0 commit comments

Comments
 (0)