I've got this line of inline assembly code in a Solidity file and I'm trying to understand what some parameters do.
assembly {
success := call(sub(gas, 2000), 8, 0, add(input, 0x20), mul(inputSize, 0x20), out, 0x20)
}
I'm struggling to understand how the add() is being used. The input variable is a uint array, and I don't know what 0x20 is referring to. The Ethereum Yellow Paper says it refers to the keccak256 function but that doesn't make sense to be added. My understanding is that the add opcode adds two uint256 values, but its used here to add an array and an address.
The code comes from line 158 in the below github link. The file it is in is an implementation of BLS / BLGS signature verification.
Any help clarifying this would be much appreciated!
Source: https://gist.github.com/BjornvdLaan/ca6dd4e3993e1ef392f363ec27fe74c4#file-blsexample-sol