I am experimenting the `ecmul` opcode (inside the `EccMul` function) where I can multiply the given generator with the given number. pragma solidity ^0.8.0; contract TestEccMul { struct G1Point { uint X; uint Y; } struct G2Point { uint[2] X; uint[2] Y; } /// @return the generator of G1 function P1() public pure returns (G1Point memory) { return G1Point(1, 2); } /// @return the generator of G2 function P2() public pure returns (G2Point memory) { return G2Point( [535000198726010842494463887012728317008839985956991949449597676023059784793, 50911955057697873758342946860545764866265758828426205386527214348449976128083], [34456506622601912613857833514763279459301076221556609925761869949091594580415, 8211078999328499834214571830542910221251497399640112479758011117184688730247] ); } function EccMul(uint s) public view returns (G1Point memory r) { uint[3] memory input; input[0] = P1().X; input[1] = P1().Y; input[2] = s; assembly { if iszero (staticcall(gas(), 0x07, input, 0x60, r, 0x40)) { revert (0,0) } } return r; } } The code perfectly works with the given generator (where `g1 = (1,2)` ); however, EVM reverts when I change the generator to any other coordinates. Why is this the case? Whats the point of this if I can't use other generators then the one defined in [EIP-197][1]. Am I missing something? [1]: https://eips.ethereum.org/EIPS/eip-197