This abstraction will add clarity make it possible to use the same code with multiple curves. The two interfaces will look something like: ```go type Curve interface { PointFromXYBase10(string,string) *CurvePoint PointFromXY(*big.Int,*big.Int) *CurvePoint PointFromHash() *CurvePoint Prime() *big.Int Order() *big.Int RandomN() *big.Int RandomP() *big.Int ScalarBaseMult(*big.Int) *CurvePoint } type CurvePoint interface { Equals() ? GetXY() (*big.Int,*big.Int) SetFromXY(*big.Int, *big.Int) IsOnCurve() bool ScalarMult(*big.Int) Add(*CurvePoint) ParameterPointAdd(*big.Int,*big.Int) HashPointAdd(*CurvePoint, *big.Int, *big.Int) } ```
This abstraction will add clarity make it possible to use the same code with multiple curves.
The two interfaces will look something like: