34 lines
805 B
Nim
34 lines
805 B
Nim
import pkg/stint
|
|
import pkg/contractabi
|
|
import pkg/ethers/fields
|
|
|
|
type
|
|
Groth16Proof* = object
|
|
a*: G1Point
|
|
b*: G2Point
|
|
c*: G1Point
|
|
G1Point* = object
|
|
x*: UInt256
|
|
y*: UInt256
|
|
G2Point* = object
|
|
x*: array[2, UInt256]
|
|
y*: array[2, UInt256]
|
|
|
|
func solidityType*(_: type G1Point): string =
|
|
solidityType(G1Point.fieldTypes)
|
|
|
|
func solidityType*(_: type G2Point): string =
|
|
solidityType(G2Point.fieldTypes)
|
|
|
|
func solidityType*(_: type Groth16Proof): string =
|
|
solidityType(Groth16Proof.fieldTypes)
|
|
|
|
func encode*(encoder: var AbiEncoder, point: G1Point) =
|
|
encoder.write(point.fieldValues)
|
|
|
|
func encode*(encoder: var AbiEncoder, point: G2Point) =
|
|
encoder.write(point.fieldValues)
|
|
|
|
func encode*(encoder: var AbiEncoder, proof: Groth16Proof) =
|
|
encoder.write(proof.fieldValues)
|