Skip to content
This repository was archived by the owner on Jan 5, 2019. It is now read-only.

Commit c99ce41

Browse files
committed
Replace special handling of i64 for CALL with a dedicated gasLimit type (64bit)
1 parent 1a0304f commit c99ce41

File tree

2 files changed

+8
-7
lines changed

2 files changed

+8
-7
lines changed

index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ const depMap = new Map([
3838
['BLOCKHASH', ['check_overflow', 'callback_256']],
3939
['SHA3', ['memusegas', 'bswap_m256', 'check_overflow', 'keccak']],
4040
['CALL', ['bswap_m256', 'memusegas', 'check_overflow_i64', 'check_overflow', 'memset', 'callback_32']],
41-
['DELEGATECALL', ['callback', 'memusegas', 'check_overflow', 'memset']],
42-
['CALLCODE', ['bswap_m256', 'callback', 'memusegas', 'check_overflow', 'check_overflow_i64', 'memset', 'callback_32']],
41+
['DELEGATECALL', ['callback', 'memusegas', 'check_overflow_i64', 'check_overflow', 'memset']],
42+
['CALLCODE', ['bswap_m256', 'callback', 'memusegas', 'check_overflow_i64', 'check_overflow', 'check_overflow_i64', 'memset', 'callback_32']],
4343
['CREATE', ['bswap_m256', 'bswap_m160', 'callback_160', 'memusegas', 'check_overflow']],
4444
['RETURN', ['memusegas', 'check_overflow']],
4545
['BALANCE', ['bswap_m256', 'callback_128']],

wasm/generateInterface.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ const wasmTypes = {
1212
length: 'i32',
1313
ipointer: 'i32',
1414
opointer: 'i32',
15+
gasLimit: 'i64',
1516
// FIXME: these are handled wrongly currently
1617
address: 'i32',
1718
i128: 'i32',
@@ -139,19 +140,19 @@ const interfaceManifest = {
139140
CALL: {
140141
name: 'call',
141142
async: true,
142-
input: ['i64', 'address', 'i128', 'readOffset', 'length'],
143+
input: ['gasLimit', 'address', 'i128', 'readOffset', 'length'],
143144
output: ['i32']
144145
},
145146
CALLCODE: {
146147
name: 'callCode',
147148
async: true,
148-
input: ['i64', 'address', 'i128', 'readOffset', 'length'],
149+
input: ['gasLimit', 'address', 'i128', 'readOffset', 'length'],
149150
output: ['i32']
150151
},
151152
DELEGATECALL: {
152153
name: 'callDelegate',
153154
async: true,
154-
input: ['i32', 'address', 'i128', 'readOffset', 'length', 'writeOffset', 'length'],
155+
input: ['gasLimit', 'address', 'i128', 'readOffset', 'length', 'writeOffset', 'length'],
155156
output: ['i32']
156157
},
157158
SSTORE: {
@@ -263,7 +264,7 @@ function generateManifest (interfaceManifest, opts) {
263264
// the wasm memory offset is a new item on the EVM stack
264265
spOffset++
265266
call += `(i32.add (get_global $sp) (i32.const ${spOffset * 32}))`
266-
} else if (input === 'i64' && opcode === 'CALL') {
267+
} else if (input === 'gasLimit') {
267268
// i64 param for CALL is the gas
268269
// add 2300 gas subsidy
269270
// for now this only works if the gas is a 64-bit value
@@ -281,7 +282,7 @@ function generateManifest (interfaceManifest, opts) {
281282
call += checkOverflowStackItem64(spOffset)
282283
} else if (input === 'i32') {
283284
call += checkOverflowStackItem256(spOffset)
284-
} else if (input === 'i64' && opcode !== 'CALL') {
285+
} else if (input === 'i64') {
285286
call += checkOverflowStackItem64(spOffset)
286287
} else if (input === 'writeOffset' || input === 'readOffset') {
287288
lastOffset = input

0 commit comments

Comments
 (0)