marshal for bigint is like:
|
var BigIntAtlasEntry = atlas.BuildEntry(big.Int{}).Transform(). |
|
TransformMarshal(atlas.MakeMarshalTransformFunc( |
|
func(i big.Int) ([]byte, error) { |
|
return i.Bytes(), nil |
|
})). |
|
TransformUnmarshal(atlas.MakeUnmarshalTransformFunc( |
|
func(x []byte) (big.Int, error) { |
|
return *big.NewInt(0).SetBytes(x), nil |
|
})). |
|
Complete() |
var BigIntAtlasEntry = atlas.BuildEntry(big.Int{}).Transform().
TransformMarshal(atlas.MakeMarshalTransformFunc(
func(i big.Int) ([]byte, error) {
return i.Bytes(), nil
})).
TransformUnmarshal(atlas.MakeUnmarshalTransformFunc(
func(x []byte) (big.Int, error) {
return *big.NewInt(0).SetBytes(x), nil
})).
Complete()
but i.Bytes() would drop the sign for bignum!
// Bytes returns the absolute value of x as a big-endian byte slice.
func (x *Int) Bytes() []byte {
buf := make([]byte, len(x.abs)*_S)
return buf[x.abs.bytes(buf):]
}
and when deserialize, the bigint just fill for big.NewInt(0), it's a positive number. So the negative sign is dropped.
I think it not in expectation
marshal for bigint is like:
go-ipld-cbor/refmt.go
Lines 27 to 36 in e249008
but
i.Bytes()would drop the sign for bignum!and when deserialize, the bigint just fill for
big.NewInt(0), it's a positive number. So the negative sign is dropped.I think it not in expectation