remove 'var' modifier from 'computation: var BaseComputation'
This commit is contained in:
parent
e8f6eeca43
commit
07ac4620d9
|
@ -61,7 +61,7 @@ func output*(c: BaseComputation): seq[byte] =
|
||||||
else:
|
else:
|
||||||
c.rawOutput
|
c.rawOutput
|
||||||
|
|
||||||
func `output=`*(c: var BaseComputation, value: openarray[byte]) =
|
func `output=`*(c: BaseComputation, value: openarray[byte]) =
|
||||||
c.rawOutput = @value
|
c.rawOutput = @value
|
||||||
|
|
||||||
proc outputHex*(c: BaseComputation): string =
|
proc outputHex*(c: BaseComputation): string =
|
||||||
|
@ -69,11 +69,11 @@ proc outputHex*(c: BaseComputation): string =
|
||||||
return "0x"
|
return "0x"
|
||||||
c.rawOutput.bytesToHex
|
c.rawOutput.bytesToHex
|
||||||
|
|
||||||
proc isSuicided*(c: var BaseComputation, address: EthAddress): bool =
|
proc isSuicided*(c: BaseComputation, address: EthAddress): bool =
|
||||||
result = address in c.accountsToDelete
|
result = address in c.accountsToDelete
|
||||||
|
|
||||||
proc prepareChildMessage*(
|
proc prepareChildMessage*(
|
||||||
c: var BaseComputation,
|
c: BaseComputation,
|
||||||
gas: GasInt,
|
gas: GasInt,
|
||||||
to: EthAddress,
|
to: EthAddress,
|
||||||
value: UInt256,
|
value: UInt256,
|
||||||
|
@ -126,7 +126,7 @@ proc getFork*(computation: BaseComputation): Fork =
|
||||||
else:
|
else:
|
||||||
computation.vmState.blockNumber.toFork
|
computation.vmState.blockNumber.toFork
|
||||||
|
|
||||||
proc writeContract*(computation: var BaseComputation, fork: Fork): bool =
|
proc writeContract*(computation: BaseComputation, fork: Fork): bool =
|
||||||
result = true
|
result = true
|
||||||
|
|
||||||
let contractCode = computation.output
|
let contractCode = computation.output
|
||||||
|
@ -150,7 +150,7 @@ proc writeContract*(computation: var BaseComputation, fork: Fork): bool =
|
||||||
if fork < FkHomestead: computation.output = @[]
|
if fork < FkHomestead: computation.output = @[]
|
||||||
result = false
|
result = false
|
||||||
|
|
||||||
proc transferBalance(computation: var BaseComputation, opCode: static[Op]) =
|
proc transferBalance(computation: BaseComputation, opCode: static[Op]) =
|
||||||
if computation.msg.depth > MaxCallDepth:
|
if computation.msg.depth > MaxCallDepth:
|
||||||
computation.setError(&"Stack depth limit reached depth={computation.msg.depth}")
|
computation.setError(&"Stack depth limit reached depth={computation.msg.depth}")
|
||||||
return
|
return
|
||||||
|
@ -167,9 +167,9 @@ proc transferBalance(computation: var BaseComputation, opCode: static[Op]) =
|
||||||
db.subBalance(computation.msg.sender, computation.msg.value)
|
db.subBalance(computation.msg.sender, computation.msg.value)
|
||||||
db.addBalance(computation.msg.storageAddress, computation.msg.value)
|
db.addBalance(computation.msg.storageAddress, computation.msg.value)
|
||||||
|
|
||||||
proc executeOpcodes*(computation: var BaseComputation) {.gcsafe.}
|
proc executeOpcodes*(computation: BaseComputation) {.gcsafe.}
|
||||||
|
|
||||||
proc applyMessage*(computation: var BaseComputation, opCode: static[Op]) =
|
proc applyMessage*(computation: BaseComputation, opCode: static[Op]) =
|
||||||
computation.snapshot()
|
computation.snapshot()
|
||||||
defer: computation.dispose()
|
defer: computation.dispose()
|
||||||
|
|
||||||
|
@ -202,7 +202,7 @@ proc applyMessage*(computation: var BaseComputation, opCode: static[Op]) =
|
||||||
else:
|
else:
|
||||||
computation.rollback()
|
computation.rollback()
|
||||||
|
|
||||||
proc addChildComputation*(computation: var BaseComputation, child: BaseComputation) =
|
proc addChildComputation*(computation: BaseComputation, child: BaseComputation) =
|
||||||
if child.isError:
|
if child.isError:
|
||||||
if child.msg.isCreate:
|
if child.msg.isCreate:
|
||||||
computation.returnData = child.output
|
computation.returnData = child.output
|
||||||
|
@ -223,14 +223,14 @@ proc addChildComputation*(computation: var BaseComputation, child: BaseComputati
|
||||||
computation.gasMeter.returnGas(child.gasMeter.gasRemaining)
|
computation.gasMeter.returnGas(child.gasMeter.gasRemaining)
|
||||||
computation.children.add(child)
|
computation.children.add(child)
|
||||||
|
|
||||||
proc registerAccountForDeletion*(c: var BaseComputation, beneficiary: EthAddress) =
|
proc registerAccountForDeletion*(c: BaseComputation, beneficiary: EthAddress) =
|
||||||
if c.msg.storageAddress in c.accountsToDelete:
|
if c.msg.storageAddress in c.accountsToDelete:
|
||||||
raise newException(ValueError,
|
raise newException(ValueError,
|
||||||
"invariant: should be impossible for an account to be " &
|
"invariant: should be impossible for an account to be " &
|
||||||
"registered for deletion multiple times")
|
"registered for deletion multiple times")
|
||||||
c.accountsToDelete[c.msg.storageAddress] = beneficiary
|
c.accountsToDelete[c.msg.storageAddress] = beneficiary
|
||||||
|
|
||||||
proc addLogEntry*(c: var BaseComputation, log: Log) {.inline.} =
|
proc addLogEntry*(c: BaseComputation, log: Log) {.inline.} =
|
||||||
c.logEntries.add(log)
|
c.logEntries.add(log)
|
||||||
|
|
||||||
# many methods are basically TODO, but they still return valid values
|
# many methods are basically TODO, but they still return valid values
|
||||||
|
|
|
@ -452,7 +452,7 @@ op sstore, inline = false, slot, value:
|
||||||
computation.vmState.mutateStateDB:
|
computation.vmState.mutateStateDB:
|
||||||
db.setStorage(computation.msg.storageAddress, slot, value)
|
db.setStorage(computation.msg.storageAddress, slot, value)
|
||||||
|
|
||||||
proc jumpImpl(computation: var BaseComputation, jumpTarget: UInt256) =
|
proc jumpImpl(computation: BaseComputation, jumpTarget: UInt256) =
|
||||||
if jumpTarget >= computation.code.len.u256:
|
if jumpTarget >= computation.code.len.u256:
|
||||||
raise newException(InvalidJumpDestination, "Invalid Jump Destination")
|
raise newException(InvalidJumpDestination, "Invalid Jump Destination")
|
||||||
|
|
||||||
|
@ -537,7 +537,7 @@ proc canTransfer(computation: BaseComputation, memPos, memLen: int, value: Uint2
|
||||||
|
|
||||||
result = true
|
result = true
|
||||||
|
|
||||||
proc setupCreate(computation: var BaseComputation, memPos, len: int, value: Uint256): BaseComputation =
|
proc setupCreate(computation: BaseComputation, memPos, len: int, value: Uint256): BaseComputation =
|
||||||
let
|
let
|
||||||
callData = computation.memory.read(memPos, len)
|
callData = computation.memory.read(memPos, len)
|
||||||
createMsgGas = computation.getGasRemaining()
|
createMsgGas = computation.getGasRemaining()
|
||||||
|
@ -601,7 +601,7 @@ op create, inline = false, value, startPosition, size:
|
||||||
else:
|
else:
|
||||||
push: childComp.msg.storageAddress
|
push: childComp.msg.storageAddress
|
||||||
|
|
||||||
proc callParams(computation: var BaseComputation): (UInt256, UInt256, EthAddress, EthAddress, EthAddress, UInt256, UInt256, UInt256, UInt256, MsgFlags) =
|
proc callParams(computation: BaseComputation): (UInt256, UInt256, EthAddress, EthAddress, EthAddress, UInt256, UInt256, UInt256, UInt256, MsgFlags) =
|
||||||
let gas = computation.stack.popInt()
|
let gas = computation.stack.popInt()
|
||||||
let codeAddress = computation.stack.popAddress()
|
let codeAddress = computation.stack.popAddress()
|
||||||
|
|
||||||
|
@ -623,7 +623,7 @@ proc callParams(computation: var BaseComputation): (UInt256, UInt256, EthAddress
|
||||||
memoryOutputSize,
|
memoryOutputSize,
|
||||||
computation.msg.flags)
|
computation.msg.flags)
|
||||||
|
|
||||||
proc callCodeParams(computation: var BaseComputation): (UInt256, UInt256, EthAddress, EthAddress, EthAddress, UInt256, UInt256, UInt256, UInt256, MsgFlags) =
|
proc callCodeParams(computation: BaseComputation): (UInt256, UInt256, EthAddress, EthAddress, EthAddress, UInt256, UInt256, UInt256, UInt256, MsgFlags) =
|
||||||
let gas = computation.stack.popInt()
|
let gas = computation.stack.popInt()
|
||||||
let to = computation.stack.popAddress()
|
let to = computation.stack.popAddress()
|
||||||
|
|
||||||
|
@ -642,7 +642,7 @@ proc callCodeParams(computation: var BaseComputation): (UInt256, UInt256, EthAdd
|
||||||
memoryOutputSize,
|
memoryOutputSize,
|
||||||
computation.msg.flags)
|
computation.msg.flags)
|
||||||
|
|
||||||
proc delegateCallParams(computation: var BaseComputation): (UInt256, UInt256, EthAddress, EthAddress, EthAddress, UInt256, UInt256, UInt256, UInt256, MsgFlags) =
|
proc delegateCallParams(computation: BaseComputation): (UInt256, UInt256, EthAddress, EthAddress, EthAddress, UInt256, UInt256, UInt256, UInt256, MsgFlags) =
|
||||||
let gas = computation.stack.popInt()
|
let gas = computation.stack.popInt()
|
||||||
let codeAddress = computation.stack.popAddress()
|
let codeAddress = computation.stack.popAddress()
|
||||||
|
|
||||||
|
@ -664,7 +664,7 @@ proc delegateCallParams(computation: var BaseComputation): (UInt256, UInt256, Et
|
||||||
memoryOutputSize,
|
memoryOutputSize,
|
||||||
computation.msg.flags)
|
computation.msg.flags)
|
||||||
|
|
||||||
proc staticCallParams(computation: var BaseComputation): (UInt256, UInt256, EthAddress, EthAddress, EthAddress, UInt256, UInt256, UInt256, UInt256, MsgFlags) =
|
proc staticCallParams(computation: BaseComputation): (UInt256, UInt256, EthAddress, EthAddress, EthAddress, UInt256, UInt256, UInt256, UInt256, MsgFlags) =
|
||||||
let gas = computation.stack.popInt()
|
let gas = computation.stack.popInt()
|
||||||
let to = computation.stack.popAddress()
|
let to = computation.stack.popAddress()
|
||||||
|
|
||||||
|
@ -683,7 +683,7 @@ proc staticCallParams(computation: var BaseComputation): (UInt256, UInt256, EthA
|
||||||
emvcStatic) # is_static
|
emvcStatic) # is_static
|
||||||
|
|
||||||
template genCall(callName: untyped, opCode: Op): untyped =
|
template genCall(callName: untyped, opCode: Op): untyped =
|
||||||
proc `callName Setup`(computation: var BaseComputation, callNameStr: string): (BaseComputation, int, int) =
|
proc `callName Setup`(computation: BaseComputation, callNameStr: string): (BaseComputation, int, int) =
|
||||||
let (gas, value, to, sender,
|
let (gas, value, to, sender,
|
||||||
codeAddress,
|
codeAddress,
|
||||||
memoryInputStartPosition, memoryInputSize,
|
memoryInputStartPosition, memoryInputSize,
|
||||||
|
|
|
@ -59,12 +59,12 @@ macro op*(procname: untyped, inline: static[bool], stackParams_body: varargs[unt
|
||||||
# TODO: replace by func to ensure no side effects
|
# TODO: replace by func to ensure no side effects
|
||||||
if inline:
|
if inline:
|
||||||
result = quote do:
|
result = quote do:
|
||||||
proc `procname`*(`computation`: var BaseComputation) {.inline.} =
|
proc `procname`*(`computation`: BaseComputation) {.inline.} =
|
||||||
`popStackStmt`
|
`popStackStmt`
|
||||||
`body`
|
`body`
|
||||||
else:
|
else:
|
||||||
result = quote do:
|
result = quote do:
|
||||||
proc `procname`*(`computation`: var BaseComputation) =
|
proc `procname`*(`computation`: BaseComputation) =
|
||||||
`popStackStmt`
|
`popStackStmt`
|
||||||
`body`
|
`body`
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ macro genPush*(): untyped =
|
||||||
for size in 1 .. 32:
|
for size in 1 .. 32:
|
||||||
let name = genName(size)
|
let name = genName(size)
|
||||||
result.add quote do:
|
result.add quote do:
|
||||||
func `name`*(computation: var BaseComputation) {.inline.}=
|
func `name`*(computation: BaseComputation) {.inline.}=
|
||||||
## Push `size`-byte(s) on the stack
|
## Push `size`-byte(s) on the stack
|
||||||
computation.stack.push computation.code.readVmWord(`size`)
|
computation.stack.push computation.code.readVmWord(`size`)
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ macro genDup*(): untyped =
|
||||||
for pos in 1 .. 16:
|
for pos in 1 .. 16:
|
||||||
let name = genName(pos)
|
let name = genName(pos)
|
||||||
result.add quote do:
|
result.add quote do:
|
||||||
func `name`*(computation: var BaseComputation) {.inline.}=
|
func `name`*(computation: BaseComputation) {.inline.}=
|
||||||
computation.stack.dup(`pos`)
|
computation.stack.dup(`pos`)
|
||||||
|
|
||||||
macro genSwap*(): untyped =
|
macro genSwap*(): untyped =
|
||||||
|
@ -97,10 +97,10 @@ macro genSwap*(): untyped =
|
||||||
for pos in 1 .. 16:
|
for pos in 1 .. 16:
|
||||||
let name = genName(pos)
|
let name = genName(pos)
|
||||||
result.add quote do:
|
result.add quote do:
|
||||||
func `name`*(computation: var BaseComputation) {.inline.}=
|
func `name`*(computation: BaseComputation) {.inline.}=
|
||||||
computation.stack.swap(`pos`)
|
computation.stack.swap(`pos`)
|
||||||
|
|
||||||
proc logImpl(c: var BaseComputation, opcode: Op, topicCount: int) =
|
proc logImpl(c: BaseComputation, opcode: Op, topicCount: int) =
|
||||||
doAssert(topicCount in 0 .. 4)
|
doAssert(topicCount in 0 .. 4)
|
||||||
let (memStartPosition, size) = c.stack.popInt(2)
|
let (memStartPosition, size) = c.stack.popInt(2)
|
||||||
let (memPos, len) = (memStartPosition.cleanMemRef, size.cleanMemRef)
|
let (memPos, len) = (memStartPosition.cleanMemRef, size.cleanMemRef)
|
||||||
|
@ -122,8 +122,8 @@ proc logImpl(c: var BaseComputation, opcode: Op, topicCount: int) =
|
||||||
c.addLogEntry(log)
|
c.addLogEntry(log)
|
||||||
|
|
||||||
template genLog*() =
|
template genLog*() =
|
||||||
proc log0*(c: var BaseComputation) {.inline.} = logImpl(c, Log0, 0)
|
proc log0*(c: BaseComputation) {.inline.} = logImpl(c, Log0, 0)
|
||||||
proc log1*(c: var BaseComputation) {.inline.} = logImpl(c, Log1, 1)
|
proc log1*(c: BaseComputation) {.inline.} = logImpl(c, Log1, 1)
|
||||||
proc log2*(c: var BaseComputation) {.inline.} = logImpl(c, Log2, 2)
|
proc log2*(c: BaseComputation) {.inline.} = logImpl(c, Log2, 2)
|
||||||
proc log3*(c: var BaseComputation) {.inline.} = logImpl(c, Log3, 3)
|
proc log3*(c: BaseComputation) {.inline.} = logImpl(c, Log3, 3)
|
||||||
proc log4*(c: var BaseComputation) {.inline.} = logImpl(c, Log4, 4)
|
proc log4*(c: BaseComputation) {.inline.} = logImpl(c, Log4, 4)
|
||||||
|
|
|
@ -16,7 +16,7 @@ import
|
||||||
logScope:
|
logScope:
|
||||||
topics = "vm opcode"
|
topics = "vm opcode"
|
||||||
|
|
||||||
func invalidInstruction*(computation: var BaseComputation) {.inline.} =
|
func invalidInstruction*(computation: BaseComputation) {.inline.} =
|
||||||
raise newException(InvalidInstruction, "Invalid instruction, received an opcode not implemented in the current fork.")
|
raise newException(InvalidInstruction, "Invalid instruction, received an opcode not implemented in the current fork.")
|
||||||
|
|
||||||
let FrontierOpDispatch {.compileTime.}: array[Op, NimNode] = block:
|
let FrontierOpDispatch {.compileTime.}: array[Op, NimNode] = block:
|
||||||
|
@ -246,13 +246,13 @@ macro genFrontierDispatch(computation: BaseComputation): untyped =
|
||||||
macro genHomesteadDispatch(computation: BaseComputation): untyped =
|
macro genHomesteadDispatch(computation: BaseComputation): untyped =
|
||||||
result = opTableToCaseStmt(HomesteadOpDispatch, computation)
|
result = opTableToCaseStmt(HomesteadOpDispatch, computation)
|
||||||
|
|
||||||
proc frontierVM(computation: var BaseComputation) =
|
proc frontierVM(computation: BaseComputation) =
|
||||||
genFrontierDispatch(computation)
|
genFrontierDispatch(computation)
|
||||||
|
|
||||||
proc homesteadVM(computation: var BaseComputation) =
|
proc homesteadVM(computation: BaseComputation) =
|
||||||
genHomesteadDispatch(computation)
|
genHomesteadDispatch(computation)
|
||||||
|
|
||||||
proc executeOpcodes(computation: var BaseComputation) =
|
proc executeOpcodes(computation: BaseComputation) =
|
||||||
# TODO: Optimise getting fork and updating opCodeExec only when necessary
|
# TODO: Optimise getting fork and updating opCodeExec only when necessary
|
||||||
let fork = computation.getFork
|
let fork = computation.getFork
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,7 @@ proc getFR(data: openarray[byte]): FR =
|
||||||
if not result.fromBytes2(data):
|
if not result.fromBytes2(data):
|
||||||
raise newException(ValidationError, "Could not get FR value")
|
raise newException(ValidationError, "Could not get FR value")
|
||||||
|
|
||||||
proc ecRecover*(computation: var BaseComputation) =
|
proc ecRecover*(computation: BaseComputation) =
|
||||||
computation.gasMeter.consumeGas(
|
computation.gasMeter.consumeGas(
|
||||||
GasECRecover,
|
GasECRecover,
|
||||||
reason="ECRecover Precompile")
|
reason="ECRecover Precompile")
|
||||||
|
@ -79,7 +79,7 @@ proc ecRecover*(computation: var BaseComputation) =
|
||||||
computation.rawOutput[12..31] = pubKey.toCanonicalAddress()
|
computation.rawOutput[12..31] = pubKey.toCanonicalAddress()
|
||||||
trace "ECRecover precompile", derivedKey = pubKey.toCanonicalAddress()
|
trace "ECRecover precompile", derivedKey = pubKey.toCanonicalAddress()
|
||||||
|
|
||||||
proc sha256*(computation: var BaseComputation) =
|
proc sha256*(computation: BaseComputation) =
|
||||||
let
|
let
|
||||||
wordCount = wordCount(computation.msg.data.len)
|
wordCount = wordCount(computation.msg.data.len)
|
||||||
gasFee = GasSHA256 + wordCount * GasSHA256Word
|
gasFee = GasSHA256 + wordCount * GasSHA256Word
|
||||||
|
@ -88,7 +88,7 @@ proc sha256*(computation: var BaseComputation) =
|
||||||
computation.rawOutput = @(nimcrypto.sha_256.digest(computation.msg.data).data)
|
computation.rawOutput = @(nimcrypto.sha_256.digest(computation.msg.data).data)
|
||||||
trace "SHA256 precompile", output = computation.rawOutput.toHex
|
trace "SHA256 precompile", output = computation.rawOutput.toHex
|
||||||
|
|
||||||
proc ripemd160*(computation: var BaseComputation) =
|
proc ripemd160*(computation: BaseComputation) =
|
||||||
let
|
let
|
||||||
wordCount = wordCount(computation.msg.data.len)
|
wordCount = wordCount(computation.msg.data.len)
|
||||||
gasFee = GasRIPEMD160 + wordCount * GasRIPEMD160Word
|
gasFee = GasRIPEMD160 + wordCount * GasRIPEMD160Word
|
||||||
|
@ -98,7 +98,7 @@ proc ripemd160*(computation: var BaseComputation) =
|
||||||
computation.rawOutput[12..31] = @(nimcrypto.ripemd160.digest(computation.msg.data).data)
|
computation.rawOutput[12..31] = @(nimcrypto.ripemd160.digest(computation.msg.data).data)
|
||||||
trace "RIPEMD160 precompile", output = computation.rawOutput.toHex
|
trace "RIPEMD160 precompile", output = computation.rawOutput.toHex
|
||||||
|
|
||||||
proc identity*(computation: var BaseComputation) =
|
proc identity*(computation: BaseComputation) =
|
||||||
let
|
let
|
||||||
wordCount = wordCount(computation.msg.data.len)
|
wordCount = wordCount(computation.msg.data.len)
|
||||||
gasFee = GasIdentity + wordCount * GasIdentityWord
|
gasFee = GasIdentity + wordCount * GasIdentityWord
|
||||||
|
@ -107,7 +107,7 @@ proc identity*(computation: var BaseComputation) =
|
||||||
computation.rawOutput = computation.msg.data
|
computation.rawOutput = computation.msg.data
|
||||||
trace "Identity precompile", output = computation.rawOutput.toHex
|
trace "Identity precompile", output = computation.rawOutput.toHex
|
||||||
|
|
||||||
proc modExpInternal(computation: var BaseComputation, base_len, exp_len, mod_len: int, T: type StUint) =
|
proc modExpInternal(computation: BaseComputation, base_len, exp_len, mod_len: int, T: type StUint) =
|
||||||
template rawMsg: untyped {.dirty.} =
|
template rawMsg: untyped {.dirty.} =
|
||||||
computation.msg.data
|
computation.msg.data
|
||||||
|
|
||||||
|
@ -171,7 +171,7 @@ proc modExpInternal(computation: var BaseComputation, base_len, exp_len, mod_len
|
||||||
else:
|
else:
|
||||||
computation.rawOutput = @(powmod(base, exp, modulo).toByteArrayBE)
|
computation.rawOutput = @(powmod(base, exp, modulo).toByteArrayBE)
|
||||||
|
|
||||||
proc modExp*(computation: var BaseComputation) =
|
proc modExp*(computation: BaseComputation) =
|
||||||
## Modular exponentiation precompiled contract
|
## Modular exponentiation precompiled contract
|
||||||
## Yellow Paper Appendix E
|
## Yellow Paper Appendix E
|
||||||
## EIP-198 - https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md
|
## EIP-198 - https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md
|
||||||
|
@ -200,7 +200,7 @@ proc modExp*(computation: var BaseComputation) =
|
||||||
else:
|
else:
|
||||||
raise newException(ValueError, "The Nimbus VM doesn't support modular exponentiation with numbers larger than uint8192")
|
raise newException(ValueError, "The Nimbus VM doesn't support modular exponentiation with numbers larger than uint8192")
|
||||||
|
|
||||||
proc bn256ecAdd*(computation: var BaseComputation) =
|
proc bn256ecAdd*(computation: BaseComputation) =
|
||||||
var
|
var
|
||||||
input: array[128, byte]
|
input: array[128, byte]
|
||||||
output: array[64, byte]
|
output: array[64, byte]
|
||||||
|
@ -220,7 +220,7 @@ proc bn256ecAdd*(computation: var BaseComputation) =
|
||||||
# computation.gasMeter.consumeGas(gasFee, reason = "ecAdd Precompile")
|
# computation.gasMeter.consumeGas(gasFee, reason = "ecAdd Precompile")
|
||||||
computation.rawOutput = @output
|
computation.rawOutput = @output
|
||||||
|
|
||||||
proc bn256ecMul*(computation: var BaseComputation) =
|
proc bn256ecMul*(computation: BaseComputation) =
|
||||||
var
|
var
|
||||||
input: array[96, byte]
|
input: array[96, byte]
|
||||||
output: array[64, byte]
|
output: array[64, byte]
|
||||||
|
@ -242,7 +242,7 @@ proc bn256ecMul*(computation: var BaseComputation) =
|
||||||
# computation.gasMeter.consumeGas(gasFee, reason="ecMul Precompile")
|
# computation.gasMeter.consumeGas(gasFee, reason="ecMul Precompile")
|
||||||
computation.rawOutput = @output
|
computation.rawOutput = @output
|
||||||
|
|
||||||
proc bn256ecPairing*(computation: var BaseComputation) =
|
proc bn256ecPairing*(computation: BaseComputation) =
|
||||||
var output: array[32, byte]
|
var output: array[32, byte]
|
||||||
|
|
||||||
let msglen = len(computation.msg.data)
|
let msglen = len(computation.msg.data)
|
||||||
|
@ -275,7 +275,7 @@ proc bn256ecPairing*(computation: var BaseComputation) =
|
||||||
# computation.gasMeter.consumeGas(gasFee, reason="ecPairing Precompile")
|
# computation.gasMeter.consumeGas(gasFee, reason="ecPairing Precompile")
|
||||||
computation.rawOutput = @output
|
computation.rawOutput = @output
|
||||||
|
|
||||||
proc execPrecompiles*(computation: var BaseComputation, fork: Fork): bool {.inline.} =
|
proc execPrecompiles*(computation: BaseComputation, fork: Fork): bool {.inline.} =
|
||||||
for i in 0..18:
|
for i in 0..18:
|
||||||
if computation.msg.codeAddress[i] != 0: return
|
if computation.msg.codeAddress[i] != 0: return
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue